在实现OnItemClickListener
时,必须在OnItemClickListener
接口中实现onItemClick
方法,该方法是一个抽象方法。在onItemClick
方法中有四个参数。
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(this, "Clicked on : " + arg2 + " long arg : " + arg3,
Toast.LENGTH_LONG).show();
}
我需要知道的是最后两个参数(int arg2, long arg3
)之间的区别。正如您在我的代码中看到的,当我尝试Toast
时,我得到了两个参数相同的值。
我也有同样的问题。然而,这里的答案并不是很有帮助。我不支持自己去查找答案,特别是当所谓的文档如此不清楚的时候。不过,我确实自己查了一下,下面是我的发现。
int值是视图在父视图中的位置。对于ListView
,它是行号。第一行是位置0,第二行是位置1,第三行是位置2,以此类推。注意,如果你的ListView
有一个标题视图(就像你做的ListView.addHeaderView(View)
一样),那么标题视图将是位置0,实际的行将从1开始编号。
有时long值与int位置相同,有时不同。如果你使用的是ArrayAdapter
或SimpleAdapter
,那么它们是相同的(除非有一个标题视图,然后它们被一个关闭)。对于CursorAdapter
(以及SimpleCursorAdapter
), long id返回表的行id,即_id
。它是long而不是int,因为理论上数据库可以拥有比int所能容纳的行数更多的行,而ListView
则不能。
这里有一些其他相关的答案:
- https://stackoverflow.com/a/25622142/3681880
- https://stackoverflow.com/a/9863279/3681880
- https://stackoverflow.com/a/12966006/3681880
- https://stackoverflow.com/a/24531354/3681880
考虑阅读文档。
int
为视图位置,long
为项目ID。
(我们不能看到你得到相同的值;我们只看到你的代码,而不是你的屏幕。
给出的答案很有帮助。但是我需要的答案,我是说我想要的确切答案是我自己贴出来的。但这不会增加我的"接受水平"。所以我想把这个链接作为这个问题的答案。这是答案的链接
int value表示项目位置, 长 value表示项目Id。
public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)
parent The AdapterView where the click happened.
view The view within the AdapterView that was clicked
(this will be a view provided by the adapter)
position The position of the view in the adapter.
id The row id of the item that was clicked.
在我看来,通过位置,您可以使用适配器的getItem(position)获得行项。因此,位置表示适配器中的数据位置。
对于id参数,我认为它是一个帮助方法,如你所知,适配器中的数据总是一个记录器。一般来说,记录器应该有一个id列(类似于数据库id)。编码时,您可以通过位置获取项目,然后获取项目的id(如果项目有id)。但是您可以直接使用"id"参数获得这样的"id"。你可能注意到:位置是"int"类型,而"id"是"long"类型。
顺便说一下,如果您想使用id参数,您必须在适配器中实现getItemId()方法。