如何通过项目名称而不是位置来设置微调器位置?

问题描述 投票:0回答:3

我有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()获得它。但是,当我想将Spinner设置为数字13时,会出现如下错误:

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
3个回答
0
投票

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

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

0
投票

如果您正在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)


0
投票

您应该获得像这样的String数组

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);
© www.soinside.com 2019 - 2024. All rights reserved.