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

时间:2013-10-24 11:17:03

标签: android listview android-listview

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

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

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


第56项

第57项

第58项

第59项

第60项

现在,当用户点击“第58项”时,位置参数等于'2',而我想获得'58'。同样,“项目59”将“位置”设置为“3”,而我想要“59”。我该怎么办?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

好吧,我创建了一个带有listview的示例应用程序(基于1.5 {1}}中的代码)并在适配器中覆盖了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://www.vogella.com/articles/AndroidListView/article.html

答案 2 :(得分:0)

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