Android AdapterView点击监听器参数-位置&;身份证件

Android AdapterView点击监听器参数-位置&;身份证件,android,onlongclicklistener,android-adapterview,Android,Onlongclicklistener,Android Adapterview,我正在listview上设置一个长时间单击侦听器,我想使用单击项的索引来检索相应的对象 方法签名和参数定义根据 public-abstract-boolean-onitmlongclick(AdapterView父视图、视图视图、整型位置、长id) 参数 创建发生单击的AbsListView的父级 查看已单击的AbsListView中的视图 在列表中定位视图的位置 id单击的项目的行id 我的问题是“位置”和“身份”是否总是相同的?这些定义似乎可以互换,那么有什么区别呢?ID是来自数据库的ID

我正在listview上设置一个长时间单击侦听器,我想使用单击项的索引来检索相应的对象

方法签名和参数定义根据

public-abstract-boolean-onitmlongclick(AdapterView父视图、视图视图、整型位置、长id)
参数
创建发生单击的AbsListView的父级
查看已单击的AbsListView中的视图
在列表中定位视图的位置
id单击的项目的行id

我的问题是“位置”和“身份”是否总是相同的?这些定义似乎可以互换,那么有什么区别呢?

ID是来自数据库的ID(即_ID)<代码>位置是数组或ArrayList中的位置

例如:如果在数据库中有ID为1、2、3、4的记录,并且使用SQL检索记录(并填充数组或ArrayList),则可能会有一些筛选器(where子句),并仅显示ID为1和3的元素。这样,您只有2个可能的
位置
s-0和1


区别在于:您可能认为行ID是属于数据行本身的某个外部ID。相反,
位置
“属于”列表视图及其适配器。

位置和ID可能相同,但它实际上取决于您使用的适配器

适配器中基本上有两个方法指示ID是什么-对于a(以及快速查看源代码),是查询中的“\u ID”字段创建了光标,但适配器中指示ID参数的方法是:

它允许适配器从位置转换为对象的id,并允许ListView(或任何使用适配器缓存它的东西)——尽管您可能可以忽略HassTableID()

id将是
Adapter.getItemId(int)
的返回值,因此如果使用ArrayAdapter,它将与位置相同-快速搜索ArrayAdapter源代码显示它使用的是
返回位置计算id:)

如果您使用自定义适配器,则完全由您决定

public abstract boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)

Parameters
parent     The AbsListView where the click happened
view       The view within the AbsListView that was clicked
position   The position of the view in the list
id         The row id of the item that was clicked