【问题标题】:android spinner adapter OnItemSelectedListener what is Row Idandroid微调器适配器OnItemSelectedListener什么是行ID
【发布时间】:2017-10-04 19:14:04
【问题描述】:

我现在在 android 中使用 spinner 有一段时间了,我总是使用它在 documentation 中所说的内容,我会使用 parent.getItemAtPosition(pos) 来获取项目,或者我会使用 questions like this 但问题是:文档说

onItemSelected(AdapterView<?> parent, View view, int position, long id)中的id是选中项的行id

但是是这样吗!?

这是什么意思?

如果是被选中的行的ID,我该如何获取或设置它?

如果是 View 的 Id,它是 long,不应该是 int 吗?

谢谢。

【问题讨论】:

    标签: android spinner onitemselectedlistener


    【解决方案1】:

    您必须了解适配器在 Android 中的工作原理。基本上他们持有一个项目清单。通常是一个数组(ArrayAdapter)或一个列表。该列表具有固定顺序的项目。项目 1 位于索引 0 处,依此类推。但如果这是通过 ArrayAdapter 绑定到 ListView 的列表,则要求 ArrayAdapter 为屏幕上可见的每一行创建一个视图。然后用相应的项目初始化每一行(视图)。

    项目可能会以不同的顺序显示,例如字母升序。因此 position 是项目在底层数组中的位置,它是固定的。而 rowId 是屏幕上显示的列表中的位置。 ListView 中的行数通常远小于 ArrayAdapter 处理的底层列表。滚动到屏幕外的这些行将被重新用于进入屏幕的那些行。这样重复使用的行将被数组中的新项重新初始化(参见 ArrayAdapter.getView 中的参数 convertView)。

    我希望这张图片能更详细地解释它。否则请参阅documentationthis example

    希望这会有所帮助。

    【讨论】:

    • 如果我理解正确的话。你是说id是系统设置的,不能设置?
    • 正确。它由 UI 处理,它可以帮助您检索底层对象。但这不是由你来设置的。
    • 谢谢。我不会接受你的回答,看看是否有人用诡计或什么来回答
    • 很好的说明。从名称rowId 看来,对我来说,它是您可以以某种方式分配给行以在单击时识别它的唯一ID。显然情况并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多