我对postion
中row id
和ListActivity.onListItemClick()
之间的区别感到困惑。
文档包含以下内容:
position The position of the view in the list
id The row id of the item that was clicked
两者之间有什么实际差异吗?我假设,由于存在两个不同的参数,即存在值不同的情况,但基于文档中使用的措辞,很难看出这种差异可能是什么。是否其中一个可以保存由Cursor
或其他特殊功能提供的数据库行ID的值?
答案 0 :(得分:34)
位置:列表中视图的位置
id :已点击的项目的行ID
位置从ListView的顶部到底部的0开始,而要获得正确的行ID,传递给适配器的光标包含一个名为“_id”的列,表示每行的唯一ID很重要在表中。
如果您使用的是ArrayAdapter,position
和id
会变得相同。 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)
另见相关讨论的问题: