【发布时间】:2011-11-08 07:18:54
【问题描述】:
我有一个显示列表视图的玩家列表。 listview 的每一行都包含 button、textview 和 imageview。如何获取 textview 的值?
【问题讨论】:
我有一个显示列表视图的玩家列表。 listview 的每一行都包含 button、textview 和 imageview。如何获取 textview 的值?
【问题讨论】:
如果您使用自定义适配器类来填充列表视图,那么在您的适配器中,您可以使用 HashMap 保存键值对,将列表项的位置与数据一起保存到该文本视图中。然后您可以轻松检索它列表视图的 OnItemClickListener。
【讨论】:
根据您实施的具体情况,我会采用以下方法之一。
选项 A。
使用setOnItemClickListener 向列表注册一个点击监听器(或者,如果您使用 ListActivity 或 ListFragment,只需使用 [onListItemClick](http://developer.android.com/reference/android/app/ListActivity.html #onListItemClick%28android.widget.ListView, android.view.View, int, long%29))。 onItemClick 在被点击的视图中传递,可用于检索嵌套视图,例如您正在寻找的 TextView。
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView) view.findViewById(R.id.textview);
String tvText = tv.getText();
}
}
选项 B
假设您从某种数据集合中填充您的列表,您可能可以执行与上述类似的操作,但使用传递的position 参数作为索引,直接从集合中的对象中获取文本;即:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SomeObject so = myCollection.get(position);
String tvText = so.getTextViewText();
}
}
不过还有很多选择。我有点喜欢创建自己的 ArrayAdapter 扩展来保存列表中项目视图的模型。这样您也可以调用getItemAtPosition(int position) 或getItem(int position) 并将返回的对象转换为您的数据类型。
【讨论】:
它是静态列表还是动态生成的列表?
如果它是静态的,您可以为 xml 本身中的每个 textview 分配不同的 id,然后使用 FindViewById 访问它。
如果不是,这就是您必须做的:您显然会有一行并显示多次。所以多个文本视图将具有相同的 ID。
使用 for 循环,在其中使用 FindViewById(记住 FindViewByID 将仅访问具有提到的 Id 的第一个元素,将其 Id 设置为其他内容,在下一次迭代中选择下一个 textview,将其 Id 设置为某事)然后使用这些新的 id 可以访问它们,因此您可以访问每个 textview
【讨论】: