Android: Add event listeners to every item in a ListView

后端 未结 2 592
感情败类
感情败类 2020-12-21 05:49

I have an Android app with a ListView, and each row in the list has a TextView and a Button. What I want to do is add an OnClickListener to each Button in the ListView, but

相关标签:
2条回答
  • 2020-12-21 06:27

    It's not possible using SimpleCursorAdapter... you will have to create your own adapter. If you don't want to write a custom Adapter, at least try to enhance the SimpleCursorAdapter with new capabilities. For instance:

    public class YourAdapter extends SimpleCursorAdapter{
    
        public YourAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
            super(context, layout, c, from, to);
        }
    
        public View getView(int position, View convertView, ViewGroup parent){
            View view = super.getView(position, convertView, parent);
            Button button = (Button)view.findViewById(R.id.row_button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override public void onClick(View v) {
                    Log.i(TAG, "clicked");
                }
            }); 
            return view;
        }
    }
    

    Then, you can do:

    SimpleCursorAdapter rows = new YourAdapter(this, R.layout.row_layout, cursor, from, to);
    setListAdapter(rows);
    
    0 讨论(0)
  • 2020-12-21 06:42

    Regarding Cristian's answer, one thing I discovered is that getView is called many times, not just when the view is created. So, you will be executing your getView code more frequently than you might think.

    If the attributes (e.g. the OnClick listener) you are adding are invariant across all elements in the list, you can override newView instead. It will be called exactly once for each displayed row in the ListView. However, be warned that ListView recycles views, so as you scroll, the ones that drop off one end of the view are reused on the other, but with new data from the cursor. Again, as long as your attributes are invariant, this will work great.

    0 讨论(0)
提交回复
热议问题