Android中onItemClick的“int”和“long”参数之间有什么区别?

时间:2011-11-22 05:06:06

标签: android listview onitemclicklistener onitemclick

当我们实现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时,我得到两个参数的相同值。

5 个答案:

答案 0 :(得分:29)

我和你有同样的问题。但是,这里的答案并不是非常有用。我不支持自己去看看的答案,特别是当所谓的文档不太清楚的时候。不过,我确实自己查了一下,以下是我发现的内容。

int 值是视图的位置。对于ListView,它是行号。顶行是位置0,第二行是位置1,第三行是位置2,等等。请注意,如果您的ListView有标题视图(就像您ListView.addHeaderView(View)那样),那么标题视图将是位置0,实际行将在1开始编号。

有时值与 int 位置相同,有时它会有所不同。如果您使用的是ArrayAdapterSimpleAdapter,那么它们是相同的(除非有标题视图然后它们被一个关闭)。对于CursorAdapter(以及SimpleCursorAdapter), long id会返回表格的行ID,即_id。它是一个 long 而不是 int ,因为数据库理论上可以有比 int 更多的行,而ListView可以“T。

以下是其他一些相关答案:

答案 1 :(得分:4)

考虑阅读the documentation

int是视图位置,long是商品ID。

(我们无法看到两者的价值相同;我们只看到您的代码,而不是您的屏幕。)

答案 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中的默认工具就是返回位置。