[英]How to show custom message on dialog box from ListView items
我正在通过单击ListView中的项来寻求在对话框上显示消息的帮助。示例:
perhaps a bit more detail(code snippet) could be helpful here to response to your query. 也许更多细节(代码段)在这里有助于响应您的查询。 But I am going to provide a generalized solution here.
但是我将在这里提供一个通用的解决方案。
On the activity/fragment you initialized your list view, you can use listviews setOnItemClickListener method and override the AdapterViews onItemClick method to get your list item position: 在初始化列表视图的活动/片段上,可以使用listviews setOnItemClickListener方法并重写AdapterViews onItemClick方法来获取列表项的位置:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
/*listAdapter is the adapter for your listView and ListItem
represents individual item model for the list*/
ListItem listItem= listAdapter.getItem(i);
if(listItem!=null){
//show your dialog message according to listItem here
}
}
});
If you are using some adapter to populate your list view 如果您使用某种适配器来填充列表视图
public class DemoListView extends AppCompatActivity implements ListAdapter.PlaceClickInterface {
ListView listView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo_list);
List<String> places = new ArrayList<>(Arrays.asList("New york","washington","london"));
listView = (ListView)findViewById(R.id.list_view_demo);
ListAdapter adapter = new ListAdapter(places , this) ;
listView.setAdapter(adapter);
}
@Override
public void onPlaceClick(int position) {
Log.v("DemoListView" , "position : "+position) ;
//show dialog here with Alert dialog builder or ListFragment class with custom UI
}
}
Extend list adapters like ArrayAdapter or BaseAdapter : 扩展列表适配器,例如ArrayAdapter或BaseAdapter:
In this adapter , create an Interface that can be implemented in the Activity(DemoListView ) in which you want to show the dialog box . 在此适配器中,创建一个可以在要显示对话框的Activity(DemoListView)中实现的接口。
In the implemented method onPlaceClick() in DemoListView create and show the dialog box 在DemoListView的已实现方法onPlaceClick()中创建并显示对话框
public class ListAdapter extends BaseAdapter{
List<String> mPlaces ;
Context mContext ;
LayoutInflater mInflater ;
PlaceClickInterface mPlaceClickInterface;
public ListAdapter( List places , DemoListView demoListView) {
this.mContext = demoListView.getBaseContext() ;
this.mPlaces = places ;
this.mInflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mPlaceClickInterface = (PlaceClickInterface) demoListView;
}
@Override
public int getCount() {
return mPlaces.size();
}
@Override
public Object getItem(int position) {
return mPlaces.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_list_data, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.bind(holder ,position);
return convertView ;
}
private class ViewHolder{
TextView places ;
ViewHolder(View view){
this.places = (TextView) view.findViewById(R.id.list_place);
}
// used to populate the list with list item and attach click listener on each item
void bind(ViewHolder holder ,final int position){
holder.places.setText(mPlaces.get(position));
holder.places.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlaceClickInterface.onPlaceClick(position);
}
});
}
}
public interface PlaceClickInterface {
void onPlaceClick(int position) ;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.