【问题标题】:What is the difference between "int" and "long" argument in onItemClick in AndroidAndroid中onItemClick中的“int”和“long”参数有什么区别
【发布时间】:2011-11-22 05:06:06
【问题描述】:

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

【问题讨论】:

  • 我已经弄清楚了...link

标签: android listview onitemclicklistener onitemclick


【解决方案1】:

我和你有同样的问题。但是,这里的答案并不是很有帮助。我不支持自行查找答案,尤其是在所谓的文档不清楚的情况下。不过,我确实自己查了一下,以下是我发现的。

int 值是 viewparent 中的位置。对于ListView,它是行号。第一行是位置 0,第二行是位置 1,第三行是位置 2,依此类推。请注意,如果您的 ListView 有标题视图(就像您使用 ListView.addHeaderView(View) 一样),那么标题视图将是位置0 并且实际的行将从 1 开始编号。

有时 long 值与 int 位置相同,有时则不同。如果您使用的是ArrayAdapterSimpleAdapter,那么它们是相同的(除非有一个标题视图,然后它们被关闭了一个)。对于CursorAdapter(因此是SimpleCursorAdapter),long id 返回表的行 id,即_id。它是 long 而不是 int,因为理论上数据库的行数可能超过 int 可以容纳的行数,而 ListView 不会.

这里有一些其他相关的答案:

【讨论】:

    【解决方案2】:

    考虑阅读the documentation

    int 是视图位置,long 是项目 ID。

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

    【讨论】:

    • 我无法上传任何图片,因为我是 Stackoverflow 的新手,而且我已经阅读了文档,他们以同样的方式解释它。我需要更多解释。这就是我在这里发布问题的原因。如果您能指出一个代码示例,我非常高兴,我可以在其中看到我们如何使用最后两个参数。
    【解决方案3】:

    给出的答案很有帮助。但是需要的答案,我的意思是我想要的确切答案是我自己作为问题的评论发布的。但这不会增加我的“接受程度”。所以我想把链接作为问题的答案。这是答案的link

    【讨论】:

      【解决方案4】:

      int值表示item的位置long值表示item的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 文档)。所以请解释一些比文档更多或不同的东西。谢谢 (developer.android.com/reference/android/widget/…)
      • 让我们在列表中取 5 个项目,位置从零开始,即(0,1,2,3,4)是项目的位置,id 表示它将由 android 自动生成识别项目的运行时间。
      • 这是我得到 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 你能解释一下为什么吗?谢谢
      • Clicked on : 1 表示您从顶部单击项目 2,因为项目从顶部开始从 0 开始。 long arg : 1 即项目 ID 值。为什么你需要这么多关于 id 的解释,我们在这里没有使用 Id,我们需要 pos 足以使用项目。
      • @PolamReddyRajaReddy 是的,我知道数组是基于 0 的。但我无法理解的是为什么我会为 arg2 和 arg3 获得相同的值。你能告诉我一个例子,我可以为这些参数获得不同的值吗?提前致谢。
      【解决方案5】:

      在我看来,通过位置,您可以使用适配器的getItem(位置)获取行项。 因此,位置表示适配器中的数据位置。

      对于id参数,我认为是帮助方法,如你所知,adapter中的数据总是一个记录器。一般来说,记录器应该有一个 id 列(类似于数据库 id)。编码时,您可以通过位置获取项目,然后获取项目的id(如果项目有id)。但是您可以使用“id”参数直接获取这样的“id”。 你可能注意到:位置是“int”类型,而“id”是“long”类型。

      顺便说一句,如果你想使用id参数,你必须在adapter中实现getItemId()方法。 ArrayAdapter 中的默认实现只是返回位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2022-01-21
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        • 2010-12-27
        相关资源
        最近更新 更多