【问题标题】:how to set spinner item position如何设置微调器项目位置
【发布时间】:2016-05-24 23:51:18
【问题描述】:

我正在创建一个 android 应用程序,我想在其中添加微调器(即国家/地区)中的值。我成功添加了它们,但我想在微调器列表的顶部显示我想要的国家,即我想在微调器的 0 索引处显示澳大利亚。那么我怎样才能做到这一点呢?任何人请帮助我。

这是我的代码:

    MySpinnerAdapter adapter = new MySpinnerAdapter(SignUp.this, android.R.layout.simple_spinner_item, countryname);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_country.setAdapter(adapter);
    spinner_country.setSelection(countryname.size() - 1);
    spinner_country.setSelection(12);

    Collections.sort(countryname);

现在我正在这样做,它显示ArrayIndexOutOfBoundsException

    String[] str = new String[countryname.size()-1];
    str = countryname.toArray(str);

    int indexTarget = 13;
    String valueAtIndex = str[indexTarget];
    for(int i = indexTarget; i > 0; i--){
        str[i] = str[i-1];
    }
    str[0] = valueAtIndex;

    for (int i = 0; i < str.length; i++)
    {
        System.out.println(str[i]);
    }
    List<String> stringList = new ArrayList<String>(Arrays.asList(str));
    MySpinnerAdapter adapter = new MySpinnerAdapter(SignUp.this, android.R.layout.simple_spinner_item, stringList);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_country.setAdapter(adapter);
    spinner_country.setSelection(countryname.size() - 1);
    Collections.sort(countryname);

【问题讨论】:

  • setSelection 向微调器显示给定的索引值,但如果您想根据您的要求显示微调器列表项,那么您在提供给微调器之前已经安排了列表。
  • 为什么不开始使用Australia 将名称添加到您的数组中?
  • @hareshsetselection 显示澳大利亚已被选中,但我想在微调器列表的索引 0 处显示澳大利亚
  • 您可以使用 countryname.add(1,"Australia") 在您的数组列表中将其设置为第一个位置,从而将澳大利亚设置为第一个位置;另请注意,添加方法不会覆盖之前指定的元素列表中的索引。它将元素移动到右侧并将列表大小增加 1。

标签: android android-layout drop-down-menu android-spinner


【解决方案1】:

如果您希望澳大利亚在 spinner 中的第一个位置,请将其添加到您的 countryname 的第零个索引中。

您可以使用Australia 开始向您的countryname 添加名称,以便它位于第零个索引处并出现在微调器中的第一个位置。

spinner.setSelection(12) 将从您提供给适配器的数组中选择第 13 个值。它不会在第一个位置。

编辑

这只是一个例子,你需要做相应的修改。这里原始数组是B, M, T, A, C,我希望A 是第一个,所以我需要index of A。对于您的问题,您需要Australia的索引

    String[] str = {"B", "M", "T", "A", "C"};;
    int indexTarget = 3;
    String valueAtIndex = str[indexTarget];
    for(int i = indexTarget; i > 0; i--){
       str[i] = str[i-1];
    }
    str[0] = valueAtIndex;

    for (int i = 0; i < str.length; i++)
        System.out.println(str[i]);

输出

一个 乙 米 吨 C

现在A 位于首位。

【讨论】:

  • 感谢它解决了我的问题,但我如何将 str[i] 分配给微调器?
  • 不要分配 str[i],只需将 str 传递给您的适配器。您应该在将String array 传递给Adapter 之前编写此代码。然后你的其余代码保持不变。
  • 我在做这个 List stringList = new ArrayList(Arrays.asList(str)); MySpinnerAdapter 适配器 = new MySpinnerAdapter(SignUp.this, android.R.layout.simple_spinner_item, stringList);它给出 Arrayindexoutofbound 的错误
  • 什么是countryname
  • 县名是数组列表
猜你喜欢
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多