【问题标题】:Android: Spinner dropdown with selected item at top positionAndroid:顶部位置带有所选项目的微调器下拉列表
【发布时间】:2013-01-13 20:16:40
【问题描述】:

我对 Android 中的 Spinner 有疑问。从下拉列表中选择一个项目将在下次打开该下拉列表时调整它的偏移量。例如,如果我在 500 项下拉列表中选择第 100 项,下次我打开下拉列表时,第 100 项将位于列表顶部。这是我想要的行为。

当我将选择器功能与调用setSelection(int) 结合起来时,似乎出现了问题。通过以下步骤,我似乎打破了下拉微调器上的偏移系统。

  • 打开微调器并选择第二个项目。
  • 再次打开微调器,这次关闭它而不选择任何内容。
  • 在 Spinner 上调用setSelection(int),其值大于 2。
  • 第三次打开微调器。请注意,偏移量与步骤 1 中的相同。

我查看了 Spinner 和 AdapterView 中的代码,但看不到任何我错过的公共调用。这是 Spinner 中的错误还是我的代码中的错误?

【问题讨论】:

  • 据我了解您的问题,要实现将选定项目置于顶部的特定行为,您可能需要在每次选择时重新排序微调器适配器。
  • 可以通过手动设置 id 的值,然后在任何你想要的地方调用它们来实现。
  • @Brad 给你的建议,有 500 件物品的微调器是不好的。你认为这会给用户带来良好的体验吗......而且我已经为我的仪表板应用程序实现了与 listview 相同的功能。对我来说没有问题..
  • 500 项只是一个例子。

标签: android spinner


【解决方案1】:

我认为您可以通过将列表发送到适配器来解决该问题。选择项目后,对列表进行排序,然后使用适配器的 notifyDataSetChanged() 函数。当您再次调用 setSelection(int) 函数时,对 List 进行排序并使用 notifyDataSetChanged() 函数。

【讨论】:

    【解决方案2】:

    你试过public void setSelection (int position, boolean animate)吗?我没有尝试过,但我认为将true 作为第二个参数传递应该会使列表滚动到所选位置。另一种方法是计算滚动偏移量(项目高度 x 选定项目位置)并调用setDropDownVerticalOffset

    更新:我尝试将 API 演示中的 Spinner 示例修改为使用 setSelection(7, true),并且按照您在问题中提供的 4 个步骤进行操作似乎可以正常工作。我刚刚添加了一个Handler,修改showToast如下:

    private final Handler handler = new Handler();
    
    void showToast(CharSequence msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        handler.postDelayed(new Runnable(){
            public void run() {
                Toast.makeText(Spinner1.this, "auto setting", Toast.LENGTH_SHORT).show();
                Spinner s2 = (Spinner) findViewById(R.id.spinner2);
                s2.setSelection(7, true);
            }
        }, 5000);
    }
    

    我测试如下:

    1. 打开第二个微调器并选择“Venus”(第二个选择)。
    2. 打开第二个微调器,然后按返回关闭
    3. 5 秒后,postDelayed 调用导致选择“Neptune”(第七个选择)
    4. 打开微调器,偏移量正确

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多