当我们实现OnItemClickListener
时,我们必须实现onItemClick
方法,这是OnItemClickListener
接口中的抽象方法。在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
时,我得到两个参数的相同值。
答案 0 :(得分:29)
我和你有同样的问题。但是,这里的答案并不是非常有用。我不支持自己去看看的答案,特别是当所谓的文档不太清楚的时候。不过,我确实自己查了一下,以下是我发现的内容。
int 值是父中视图的位置。对于ListView
,它是行号。顶行是位置0,第二行是位置1,第三行是位置2,等等。请注意,如果您的ListView
有标题视图(就像您ListView.addHeaderView(View)
那样),那么标题视图将是位置0,实际行将在1开始编号。
有时长值与 int 位置相同,有时它会有所不同。如果您使用的是ArrayAdapter
或SimpleAdapter
,那么它们是相同的(除非有标题视图然后它们被一个关闭)。对于CursorAdapter
(以及SimpleCursorAdapter
), long id会返回表格的行ID,即_id
。它是一个 long 而不是 int ,因为数据库理论上可以有比 int 更多的行,而ListView
可以“T。
以下是其他一些相关答案:
答案 1 :(得分:4)
答案 2 :(得分:2)
给出的答案非常有帮助。但是需要的答案,我的意思是我想要的确切答案是我自己发布的问题评论。但那不会增加我的“接受水平”。所以我想把链接作为问题的答案。这是答案的link。
答案 3 :(得分:1)
int 值代表商品的位置,长值代表商品 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.
答案 4 :(得分:1)
在我看来,通过这个位置,你可以获得带有适配器的getItem(位置)的行项。 因此,该位置表示适配器中的数据位置。
对于id参数,我认为这是一个帮助方法,如你所知,适配器中的数据总是一个记录器。一般来说,记录器应该有一个id列(类似于数据库id)。在编码时,您可以通过位置获取项目,然后获取项目的ID(如果项目具有id)。但你可以直接用“id”参数得到这样的“id”。 您可能会注意到:位置是“int”类型而“id”是“long”类型。
顺便说一句,如果你想使用id参数,你必须在适配器中实现getItemId()方法。 ArrayAdapter中的默认工具就是返回位置。