我有一个自定义ListView,其中两个TextView都包含不同的值。我希望能够在单击某个项目时从其中一个TextView获取内容。
这是我到目前为止的代码:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String value;
// value = (get value of TextView here)
}
});
我希望能够将value
分配给其中一个TextView的文本。
答案 0 :(得分:9)
虽然@ Sam的建议在大多数情况下都能正常使用,但实际上我更喜欢在AdapterView
中使用提供的onItemClick(...)
:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Person person = (Person) parent.getItemAtPosition(position);
// ...
}
我认为这是一种更加傻瓜式的方法,因为AdapterView
会考虑使用ListView.addHeaderView(...)
可能添加的任何标题视图。
例如,如果您的ListView
包含一个标头,则点按适配器提供的第一项将导致position
变量的值为1
(而不是{{ 1}},这是没有标题的默认情况),因为标题占据位置0
。因此,错误地检索位置的错误数据并为最后一个列表项引入0
非常容易。通过从ArrayIndexOutOfBoundsException
检索项目,位置将自动正确偏移。您当然可以手动更正它,但为什么不使用提供的工具? :)
仅供参考和FWIW。
答案 1 :(得分:3)
您有几个选择。我引用了previous question。
中的代码您可以从行的布局view
访问此数据:
ViewHolder holder = (ViewHolder) view.getTag();
// Now use holder.name.getText().toString() and holder.description as you please
您可以使用position
:
Person person = mAdapter.getItem(position);
// Now use person.name and person.description as you please
(顺便提一下,在您的Person类中,name
和description
为public
,因此您不需要get方法。)
答案 2 :(得分:0)
在adaterclass中覆盖以下方法。
public String[] getText() {
return text;
}