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)
     }
});

我希望能够分配value给 TextView 之一的文本。

4

3 回答 3

10

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

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

我认为这是一种更简单的方法,因为AdapterView它将考虑可能使用ListView.addHeaderView(...).

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

仅供参考和 FWIW。

于 2012-12-24T02:19:00.987 回答
3

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

  • 您可以从行的布局访问此数据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您不需要 get 方法。)descriptionpublic

于 2012-12-24T00:21:01.930 回答
0

覆盖adaterclass中的以下方法。

public String[] getText() {
        return text;
    }
于 2013-05-18T07:34:28.050 回答