简体   繁体   English

如何从ListView项在对话框上显示自定义消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM