我有一个更新视图,在那里我需要预先选择存储在数据库中的值为一个微调器。
我有这样的想法,但适配器没有indexOf方法,所以我被卡住了。
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
我有一个更新视图,在那里我需要预先选择存储在数据库中的值为一个微调器。
我有这样的想法,但适配器没有indexOf方法,所以我被卡住了。
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
当前回答
根据Merrill的回答,我想出了这个单线解决方案……它不是很漂亮,但是你可以责怪那些维护Spinner代码的人忽略了包含一个这样做的函数。
mySpinner.setSelection(((ArrayAdapter<String>)mySpinner.getAdapter()).getPosition(myString));
你会得到一个警告,关于ArrayAdapter<String>的强制转换是如何未选中的…实际上,您可以像Merrill那样使用ArrayAdapter,但这只是将一个警告交换为另一个警告。
如果警告导致问题,只需添加
@SuppressWarnings("unchecked")
到方法签名或语句之上。
其他回答
这是我通过字符串获取索引的简单方法。
private int getIndexByString(Spinner spinner, String string) {
int index = 0;
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(string)) {
index = i;
break;
}
}
return index;
}
我正在使用一个自定义适配器,这段代码就足够了:
yourSpinner.setSelection(arrayAdapter.getPosition("Your Desired Text"));
所以,你的代码片段将是这样的:
void setSpinner(String value)
{
yourSpinner.setSelection(arrayAdapter.getPosition(value));
}
如果你需要在任何旧的适配器上有一个indexOf方法(并且你不知道底层实现),那么你可以使用这个:
private int indexOf(final Adapter adapter, Object value)
{
for (int index = 0, count = adapter.getCount(); index < count; ++index)
{
if (adapter.getItem(index).equals(value))
{
return index;
}
}
return -1;
}
假设你的Spinner名为mSpinner,它包含一个选项:"some value"。
要查找并比较“some value”在Spinner中的位置,请使用以下命令:
String compareValue = "some value";
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.select_state, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
if (compareValue != null) {
int spinnerPosition = adapter.getPosition(compareValue);
mSpinner.setSelection(spinnerPosition);
}
如果你使用字符串数组,这是最好的方法:
int selectionPosition= adapter.getPosition("YOUR_VALUE");
spinner.setSelection(selectionPosition);