【问题标题】:How to set Spinner position by item name, not by position?如何按项目名称而不是按位置设置 Spinner 位置?
【发布时间】:2023-03-10 04:56:01
【问题描述】:

我有 Spinner 从 array.xml 文件中的 string-array 获取它的值。它看起来像这样:

<string-array name="arr_typl">
    <item>0</item>
    <item>1</item>
    <item>4</item>
    <item>5</item>
    <item>12</item>
    <item>13</item>
</string-array>

当我想从中获得价值时,我可以通过getSelectedItem() 获得它。但是当我想用例如数字 13 设置 Spinner 时,我会收到如下错误:

java.lang.ArrayIndexOutOfBoundsException: length=6; index=13

我怎样才能使Spinner 获得价值而不是位置? 这是我的代码:

spinner3_6 = Objects.requireNonNull(getView()).findViewById(R.id.sp3_6);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(Objects.requireNonNull(getActivity()), R.array.arr_typl_3, R.layout.value_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3_6.setAdapter(adapter);

提前致谢

【问题讨论】:

    标签: android arrays spinner


    【解决方案1】:

    你应该得到这样的字符串数组

    String[] stringArray =  getResources().getStringArray(R.array.shoes);
    final int position = ArrayUtils.indexOf(stringArray ,"13");
    

    然后将微调器设置为

    ArrayAdapter<CharSequence> adapter = 
    ArrayAdapter.createFromResource(Objects.requireNonNull(getActivity()), stringArray , 
    R.layout.value_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setSelection(position);
    

    【讨论】:

      【解决方案2】:

      如果您正在 Spinner 中寻找类似 spinner.setSelectedItem(item) 的方法,则没有。

      你必须找到物品的位置。你有项目,你有微调器的数组。

      // The array that you are filling the spinner with
      String[] array = getResources().getStringArray(R.array.testArray);
      // We have to find the position, initial position is -1, that means that we haven't found the position yet
      int position = -1;
      for (int i = 0; i < array.length; i++) {
          if (array[i].contains(item)) {
              position = i;
          }
      }
      

      之后,您可以拨打spinner.setSelection(position)

      【讨论】:

        【解决方案3】:

        您可以在数组中找到数据的位置并将其传递给 Spinner:

        final String[] values = getResources().getStringArray(R.array.arr_typl);
        final int position = Arrays.asList(values).indexOf("13");
        

        【讨论】:

          猜你喜欢
          • 2015-06-17
          • 1970-01-01
          • 2020-04-11
          • 1970-01-01
          • 1970-01-01
          • 2015-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多