我有一个更新视图,在那里我需要预先选择存储在数据库中的值为一个微调器。
我有这样的想法,但适配器没有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);
}
当前回答
使用下面的行来选择使用值:
mSpinner.setSelection(yourList.indexOf("value"));
其他回答
前面的一些答案是非常正确的,我只是想确保你们没有人陷入这样的问题。
如果使用String将值设置为ArrayList。格式,你必须得到值的位置使用相同的字符串结构string .format。
一个例子:
ArrayList<String> myList = new ArrayList<>();
myList.add(String.format(Locale.getDefault() ,"%d", 30));
myList.add(String.format(Locale.getDefault(), "%d", 50));
myList.add(String.format(Locale.getDefault(), "%d", 70));
myList.add(String.format(Locale.getDefault(), "%d", 100));
你必须像这样得到所需值的位置:
myList.setSelection(myAdapter.getPosition(String.format(Locale.getDefault(), "%d", 70)));
否则,您将得到-1,项未找到!
我使用Locale.getDefault(),因为是阿拉伯语。
我希望这对你有帮助。
I had the same issue when trying to select the correct item in a spinner populated using a cursorLoader. I retrieved the id of the item I wanted to select first from table 1 and then used a CursorLoader to populate the spinner. In the onLoadFinished I cycled through the cursor populating the spinner's adapter until I found the item that matched the id I already had. Then assigned the row number of the cursor to the spinner's selected position. It would be nice to have a similar function to pass in the id of the value you wish to select in the spinner when populating details on a form containing saved spinner results.
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
cursor.moveToFirst();
int row_count = 0;
int spinner_row = 0;
while (spinner_row < 0 || row_count < cursor.getCount()){ // loop until end of cursor or the
// ID is found
int cursorItemID = bCursor.getInt(cursor.getColumnIndexOrThrow(someTable.COLUMN_ID));
if (knownID==cursorItemID){
spinner_row = row_count; //set the spinner row value to the same value as the cursor row
}
cursor.moveToNext();
row_count++;
}
}
spinner.setSelection(spinner_row ); //set the selected item in the spinner
}
以下是我的完整解决方案。我有以下enum:
public enum HTTPMethod {GET, HEAD}
用于后续课程
public class WebAddressRecord {
...
public HTTPMethod AccessMethod = HTTPMethod.HEAD;
...
使用HTTPMethod enum-member设置微调器的代码:
Spinner mySpinner = (Spinner) findViewById(R.id.spinnerHttpmethod);
ArrayAdapter<HTTPMethod> adapter = new ArrayAdapter<HTTPMethod>(this, android.R.layout.simple_spinner_item, HTTPMethod.values());
mySpinner.setAdapter(adapter);
int selectionPosition= adapter.getPosition(webAddressRecord.AccessMethod);
mySpinner.setSelection(selectionPosition);
其中R.id.spinnerHttpmethod定义在布局文件中,而android.R.layout. httpmethod定义在布局文件中。Simple_spinner_item由android-studio下发。
我在Spinners中保留了一个单独的数组列表。这样我就可以在数组列表上执行indexOf,然后使用该值在Spinner中设置选择。
我正在使用一个自定义适配器,这段代码就足够了:
yourSpinner.setSelection(arrayAdapter.getPosition("Your Desired Text"));
所以,你的代码片段将是这样的:
void setSpinner(String value)
{
yourSpinner.setSelection(arrayAdapter.getPosition(value));
}