如何将 ArrayAdapter.getView() 中的'position'参数转换为底层数据的绝对索引?



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

问题是参数"position"永远不会超过"5",因为我们示例中的ListView不能一次显示超过5个项目。但是当用户点击一个项目时,我到底应该如何知道哪个成员/索引/位置/......在阵列适配器中,此选定项代表?

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


项目56

项目57

项目58

项目59

项目60

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

好吧,我创建了一个带有列表视图的示例应用程序(基于 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

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

创建自定义适配器并重写 getView 方法,并在视图的标记中设置实际位置。这样,如果你使用 view.getTag(),你就会得到元素的真实位置。

相关内容

最新更新