点击自定义列表视图获取数据

5

我有一个自定义的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)
     }
});

我希望能够给TextView中的文本赋值value

3个回答

10

尽管 @Sam 的建议在大多数情况下都可以正常工作,但我实际上更喜欢在 onItemClick(...) 中使用提供的 AdapterView

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Person person = (Person) parent.getItemAtPosition(position);
    // ...
}

我认为这是一种稍微更加傻瓜式的方法,因为AdapterView会考虑到使用ListView.addHeaderView(...)可能添加的任何标题视图。

例如,如果您的ListView包含一个标题,则单击适配器提供的第一个项目将导致position变量具有1的值(而不是没有标题的情况下的默认值0),因为标题占据位置0。因此,很容易错误地检索错误的位置数据并为最后一个列表项引入ArrayIndexOutOfBoundsException。通过从AdapterView中检索项目,位置会自动正确偏移。当然,您也可以手动纠正它,但为什么不使用提供的工具呢? :)

只是供参考和附带价值。


3

你有几个选项。我参考了你之前的问题中的代码。

  • You can access this data from the row's layout view:

    ViewHolder holder = (ViewHolder) view.getTag();
    // Now use holder.name.getText().toString() and holder.description as you please
    
  • You can access the Adapter with position:

    Person person = mAdapter.getItem(position);
    // Now use person.name and person.description as you please
    
(顺便说一下,在你的Person类中,name和description是公共的,所以你不需要get方法。)

0

在适配器类中重写以下方法。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接