onListItemClick()中位置和行id之间的实际差异

时间:2012-10-19 00:40:56

标签: android user-interface android-listview

我对postionrow idListActivity.onListItemClick()之间的区别感到困惑。

文档包含以下内容:

position  The position of the view in the list
id        The row id of the item that was clicked

两者之间有什么实际差异吗?我假设,由于存在两个不同的参数,即存在值不同的情况,但基于文档中使用的措辞,很难看出这种差异可能是什么。是否其中一个可以保存由Cursor或其他特殊功能提供的数据库行ID的值?

2 个答案:

答案 0 :(得分:34)

  

位置:列表中视图的位置
   id :已点击的项目的行ID

位置从ListView的顶部到底部的0开始,而要获得正确的行ID,传递给适配器的光标包含一个名为“_id”的列,表示每行的唯一ID很重要在表中。

如果您使用的是ArrayAdapter,positionid会变得相同。 id将是Adapter.getItemId(int)的返回值,因此如果您使用ArrayAdapter,它将与位置相同 - 快速搜索ArrayAdapter源代码显示它使用返回位置;计算出身份。

答案 1 :(得分:28)

answer by Lazy Ninja大部分都是正确的,但忽略了使用ArrayAdapter并通过调用ListView.addHeaderView(View)方法添加标题视图的情况。

如果您的列表包含标题项,则它将位于位置0。

所以列表中的第一个“真实”项目将包含:

  • position = 1
  • id = 0

一般来说,position = id + number_of_header_views


如果您决定在已经正常工作的代码中将标题视图添加到列表中,这一点非常重要。

如果您使用position访问自己的项目,则需要按以下方式更新代码:

  • 使用position - 1作为索引
  • 使用id作为索引
  • 使用ListView.getItemAtPosition(int)代替Adapter.getItem(int)

另见相关讨论的问题: