添加onclick到自定义适配器以处理onClick事件

时间:2011-11-10 03:55:17

标签: android listview

这是我的适配器代码,它当前将DataObject中的值分配给layout.xml文件中各自的位置。接下来,我试图在这里添加一个onclicklistener,它只会向logcat打印唯一被点击的id字段,而不是整行的内容。

private class DataAdapter extends ArrayAdapter<DataObject> {

    private ArrayList<DataObject> items;

    public DataAdapter(Context context, int textViewResourceId, ArrayList<DataObject> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public long getItemId(int arg0) {
        return 1;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.data_row, null);
        }
        DataObject dataObject = items.get(position);
        if (dataElement != null) {
            TextView field1 = (TextView) view.findViewById(R.id.field1);
            TextView  field2= (TextView) view.findViewById(R.id.field2);
            TextView  id = (TextView) view.findViewById(R.id.field_id);
            if (field1 != null) {
                field1.setText("field1 " + dataOject.getField1);
            }
            if (field2 != null) {
                field2.setText("field2 " + dataOject.getField2);
            }

            view.setClickable(true);
            view.setOnClickListener

            // Would like to simply print the id in this method to Log, so that when a row is clicked, only id is printed



        }


return view;
    }

感谢您的任何想法或想法

4 个答案:

答案 0 :(得分:1)

因此,请勿在适配器代码中设置OnClickListener。在您的活动中使用setOnListItemClick()。使用这种类型的侦听器将为您提供列表中的位置作为参数之一。请注意,setOnListItemClick仅用于ListActivity,如果您没有使用ListActivity,只需在ListView对象上使用setOnItemClickListener()

答案 1 :(得分:1)

这应该有用。

view.setTag(position);
view.setOnClickListener(new View.OnClickListener() {
       @override
       public void onClick(View v) {
            Log.v(TAG, "Clicked = " + position);
       }
});

但是,我建议在AdapterView.OnItemClickListener上设置ListView,而不是在每个项目上设置个人OnClickListener

import android.widget.AdapterView.OnItemClickListener;

ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
   @override
   public void onItemClick(AdapterView<?> parent, View view,
         int position, long id) {
        Log.v(TAG, "Clicked = " + position);
   }
 });

答案 2 :(得分:1)

您可以从填充列表的基础数据结构中获取值。 例如,如果它是从List填充并且您知道位置。只需从List

中获取相应的元素

例如我在我的项目中使用了这段代码

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
         ContactItem contactItem = contactItemList.get(position);
                 ..
            }
 });

答案 3 :(得分:0)

您可以在设置适配器的ListFragment或Activity中设置onClickListener

class MyFragment extends ListFragment {
    public void onActivityCreated(Bundle savedInstanceState) {
        DataAdapter mAdapter = new DataAdapter(..);
        setListAdapter(mAdapter);
        ListView listView = getListView();
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            }
        });
     }
 }