Установите выбранный элемент счетчика программно
Я работаю над проектом android, и я использую счетчик, который использует адаптер массива, который заполняется из базы данных.
Я не могу выяснить, как я могу установить выбранный элемент программно из списка. Например, если в спиннере у меня есть следующие элементы:
- категория 1
- категория 2 3
Как бы я программно сделал категорию 2 выбранным элементом, когда экран создан. Я думал, что это может быть похоже на C# I. E Spinner.SelectedText = "категория 2", но там, кажется, нет никакого метода, подобного этому для Android.
17 ответов:
ни один из этих ответов не дал мне решение, только работал с этим:
mySpinner.post(new Runnable() { @Override public void run() { mySpinner.setSelection(position); } });
public static void selectSpinnerItemByValue(Spinner spnr, long value) { SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter(); for (int position = 0; position < adapter.getCount(); position++) { if(adapter.getItemId(position) == value) { spnr.setSelection(position); return; } } }
вы можете использовать выше, как:
selectSpinnerItemByValue(spinnerObject, desiredValue);
& конечно, вы также можете выбрать по индексу, как
spinnerObject.setSelection(index);
некоторое объяснение (по крайней мере для фрагментов - никогда не пробовал с чистой активностью). Надеюсь, это поможет кому-то лучше понять Android.
Самый популярный ответ Арун Джордж - это правильно, но не работает в некоторых случаях.
ответ Marco HC использует Runnable, который является последним средством из-за дополнительной нагрузки на процессор.ответ - вы должны просто выберите правильное место для вызова setSelection (), например работает для меня:
@Override public void onResume() { super.onResume(); yourSpinner.setSelection(pos); }
но это не будет работать в onCreateView (). Я подозреваю, что причина интереса к этой теме.
Секрет в том, что с Android вы не можете делать все, что хотите, в любом методе - oops:( - компоненты могут просто не быть готовы. В качестве другого примера-вы не можете прокручивать ScrollView ни в onCreateView (), ни в onResume () (см. ответ здесь)
почему бы вам не использовать ваши значения из БД и хранить их в ArrayList, а затем просто использовать:
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
чтобы найти значение и выбрать его:
private void selectValue(Spinner spinner, Object value) { for (int i = 0; i < spinner.getCount(); i++) { if (spinner.getItemAtPosition(i).equals(value)) { spinner.setSelection(i); break; } } }
вы можете сделать общий метод для такого рода работы, как я делаю в моем UtilityClass, который является
public void SetSpinnerSelection(Spinner spinner,String[] array,String text) { for(int i=0;i<array.length;i++) { if(array[i].equals(text)) { spinner.setSelection(i); } } }
У меня есть SimpleCursorAdapter, поэтому я должен дублировать данные для использования respose в этом посте. Итак, я рекомендую вам попробовать этот способ:
for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) { if (spinnerRegion.getItemIdAtPosition(i) == Integer .valueOf(signal.getInt(signal .getColumnIndexOrThrow("id_region")))) { spinnerRegion.setSelection(i); break; } }
Я думаю, что это реальный способ
вы можете легко установить так: spinner.setSelection (1), вместо 1, Вы можете установить любую позицию списка, который вы хотели бы показать.
оптимальное решение-это:
public String[] items= new String[]{"item1","item2","item3"}; // here you can use array or list ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items); final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner); itemsSpinner.setAdapter(adapter);
чтобы получить позицию элемента автоматически добавить следующее заявление
itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
Если у вас есть список контактов, то вы можете пойти на это:
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
Я знаю, что уже отвечали, но простой код, чтобы выбрать один элемент, очень простой:
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) { if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) { spRaca.setSelection(x); break; } }
в моем случае этот код спас мой день:
public static void selectSpinnerItemByValue(Spinner spnr, long value) { SpinnerAdapter adapter = spnr.getAdapter(); for (int position = 0; position < adapter.getCount(); position++) { if(adapter.getItemId(position) == value) { spnr.setSelection(position); return; } } }
это указано в комментариях в другом месте на этой странице, но подумал, что полезно вытащить его в ответ:
при использовании адаптера, я обнаружил, что
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
требуется после thesetAdapter
вызов; в противном случае первый элемент всегда является начальным выбором.// spinner setup... spinnerObject.setAdapter(myAdapter); spinnerObject.setSelection(INDEX_OF_CATEGORY2);
это подтверждается обзором AbsSpinner код на
setAdapter
.