1

假设我们有一个可以一次显示 5 个项目的 ListView。我们有(例如)100 个要由这个 ListView 显示的项目。当我们滚动浏览这个列表时,ListView 调用 ArrayAdapter.getView(int position, ...) 来获取新视图。

问题是参数“位置”永远不会超过“5”,因为我们示例中的 ListView 一次不能显示超过 5 个项目。但是当用户单击一个项目时,我到底应该如何知道这个选定项目代表 ArrayAdapter 中的哪个成员/索引/位置/...?

假设我们向下滚动查看以下内容:


第 56 项

第 57 项

项目 58

项目 59

第 60 项

现在,当用户单击“项目 58”时,位置参数等于“2”,而我想获得“58”。同样,“项目 59”将“位置”设置为“3”,而我想要“59”。我能做些什么?

4

3 回答 3

1

您可以使用ArrayAdapter.getItem()来获取与单击的视图关联的项目。在您的情况下,它将返回第 58 个项目,该项目当前位于第 2 位。

于 2013-10-24T11:36:15.333 回答
1

好吧,我创建了一个带有列表视图的示例应用程序(基于 1.5 章中http://www.vogella.com/articles/AndroidListView/article.html的代码)并覆盖了适配器中的 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    System.out.println("getView " + String.valueOf(position));
    return super.getView(position, convertView, parent);
}

然后我在滚动后运行应用程序和输出(每个屏幕 10 个视图):第一个屏幕为 0...9,然后为 10..19。

所以参数位置超出了getView中的views_number_per_screen。请参阅活动示例代码:http: //pastebin.com/tvKv8kBu

于 2013-10-24T12:16:35.747 回答
0

创建一个自定义适配器并覆盖 getView 方法并在视图的标签中设置实际位置。这样,如果您使用 view.getTag() ,您将获得元素的真实位置。

于 2013-10-24T11:23:20.167 回答