29

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

该文档具有以下内容:

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

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

4

2 回答 2

34

position : 视图在列表中的位置
id : 被点击项的行 id

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

如果你使用的是一个ArrayAdapter,position并且id变得一样。id 将是的返回值,Adapter.getItemId(int)因此如果您使用 ArrayAdapter,它将与位置相同 - 快速搜索ArrayAdapter源代码显示它正在使用返回位置;计算出身份证。

于 2012-10-19T01:08:25.643 回答
28

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)

另请参阅此问题以进行相关讨论:

于 2014-07-02T12:41:59.797 回答