单击从自定义列表视图中获取数据

时间:2012-12-24 00:16:18

标签: android listview

我有一个自定义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的文本。

3 个答案:

答案 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类中,namedescriptionpublic,因此您不需要get方法。)

答案 2 :(得分:0)

在adaterclass中覆盖以下方法。

public String[] getText() {
        return text;
    }