这是我的适配器代码,它当前将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;
}
感谢您的任何想法或想法
答案 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) {
}
});
}
}