Android中的onItemClick方法中,“int”和“long”参数有什么区别?

15

当我们实现 OnItemClickListener 时,需要实现 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 进行测试时,我得到了相同的值。

我需要了解 intlong 数据类型之间的差异。


我已经清楚地弄明白了... 链接 - AnujAroshA
5个回答

35

我和你一样有同样的问题。然而,这里的答案并没有非常有帮助性。我不支持那些让你自己去查找答案的回答,尤其是所谓的文档非常不清晰的情况下。虽然我确实自己查找了,以下是我找到的内容。

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 则不能。

下面是一些其他相关的答案:


3
考虑阅读文档int是视图位置,long是项目ID。
(我们无法看到您是否获得相同的值;我们只能看到您的代码,而不是您的屏幕。)

2
我无法上传任何图片,因为我是Stackoverflow的新手,并且我已经阅读了文档,但他们以相同的方式解释。我需要更多的解释。这就是为什么我在这里发布问题的原因。如果您能指向一个代码示例,让我看看如何使用那最后两个参数,我将非常高兴。 - AnujAroshA

2
所给的答案非常有帮助。但是我需要的答案,也就是我自己在问题下发布的评论中提供的确切答案却不会提高我的“接受水平”。因此,我想将链接作为问题的答案。这里是答案的链接

1
在我看来,通过位置,你可以使用适配器的getItem(position)方法获取行项。因此,位置表示适配器中的数据位置。
对于id参数,我认为它是一个辅助方法。正如你所知,适配器中的数据总是一条记录。一般来说,记录应该有一个id列(类似于数据库id)。在编码时,你可以通过位置获取项目,然后获取项目的id(如果项目有id)。但是,你可以直接使用"id"参数获取这样的"id"。
顺便说一下,如果你想使用id参数,你必须在适配器中实现getItemId()方法。ArrayAdapter中的默认实现只返回位置。

1

int值表示项目的位置long值表示项目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.

在列表中,当我们点击一个项目时,会回调该项目的“位置”。那么什么是“id”?如果您能解释一些类似的内容,我将非常感激。在提出这个问题之前,我已经做了功课(阅读了Android文档)。因此,请解释一些不同于文档的内容或更多的内容。谢谢。 - AnujAroshA
让我们在列表中取5个项目,位置从零开始,即(0,1,2,3,4)是项目的位置,id表示它将在Android运行时自动生成以识别项目。 - RajaReddy PolamReddy
这是我得到的输出结果 http://twitpic.com/7hq4yw,对应的代码如下:public void onItemClick(AdapterView<?> parent, View arg1, int arg2, long arg3) { Toast.makeText(this, "Clicked on : " + arg2 + " long arg : " + arg3, Toast.LENGTH_LONG).show(); }@Polam 能否解释一下为什么会这样呢?谢谢。 - AnujAroshA
点击了:1 表示您从顶部点击了第二个项目,因为从顶部开始的项目从0开始。长参数:1 是项目 ID 值。为什么需要这么多关于 ID 的解释?我们这里不使用 ID,我们只需要位置 pos 就足够使用项目了。 - RajaReddy PolamReddy
@PolamReddyRajaReddy 是的,我知道数组是从0开始计数的。但我不明白的是为什么arg2和arg3的值相同。你能给我一个例子吗?让这些参数的值不同。提前感谢您。 - AnujAroshA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接