Установить выбранный элемент счетчика программно

Я работаю над проектом Android, и я использую счетчик, который использует адаптер массива, который заполняется из базы данных.

Я не могу узнать, как я могу программно выбрать выбранный элемент из списка. Например, если в блесне у меня есть следующие предметы:

Category 1 Category 2 Category 3

Как бы программно сделать категорию 2 выбранным элементом при создании экрана. Я думал, что это может быть похоже на c # I.E Spinner.SelectedText = & quot; Категория 2 & quot; но, похоже, нет никакого способа, подобного этому для Android.

 Maddy21 мая 2014 г., 09:18
Пожалуйста, перейдите по этой ссылке: [Как установить выбор на элементе счетчика] [1] [1]:stackoverflow.com/questions/16358563/…

Ответы на вопрос(18)

В моем случае этот код спас мой день:

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;
        }
,    }
}

Это сработало для меня:

@Override
protected void onStart() {
    super.onStart();
    mySpinner.setSelection(position);
}

Это похоже на решение @ sberezin, но вызывает метод setSelection () в onStart ().

  for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
            if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
                spRaca.setSelection(x);
                break;
            }
        }
 28 апр. 2016 г., 19:18
Не могли бы вы добавить немного текста, чтобы объяснить свой ответ?

Почему вы не используете свои значения из БД и сохраняете их в ArrayList, а затем просто используете:

yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
 06 июн. 2016 г., 02:30
Различные решения, использующие DataAdapter, не работали для меня, но с помощью ArrayList, из которого были построены значения в этом примере, все получилось.

Я знаю, что уже ответили, но простой код для выбора одного элемента, очень простой:

spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );

the optimal solution is:

    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);

to get the position of the item automatically add the following statement

itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));

У меня есть 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;
    }
}

Я думаю, что это настоящий путь

 14 мая 2014 г., 09:26
да, в случае SimpleCursorAdapter, spinnerRegion.getItemIdAtPosition (i) дает курсор, который можно использовать для получения столбцов.

Большую часть времениspinner.setSelection(i); //i is 0 to (size-1) of adapter's size не работает. Если вы просто позвонитеspinner.setSelection(i);

Это зависит от вашей логики.

Если представление полностью загружено, и вы хотите вызвать его из интерфейса, я предлагаю вам позвонить

spinner.setAdapter(spinner_no_of_hospitals.getAdapter());
spinner.setSelection(i); // i is 0 or within adapter size

Или, если вы хотите переключиться между жизненным циклом действия / фрагмента, позвоните так

spinner.post(new Runnable() {
  @Override public void run() {
    spinner.setSelection(i);
  }
});

Некоторое объяснение (по крайней мере, для фрагментов - никогда не пробовал с чистой деятельностью). Надеюсь, это поможет кому-то лучше понять Android.

Самый популярный ответАрун Джордж правильно, но в некоторых случаях не работает.
Ответ отМарко ХК использует Runnable, который является последним средством из-за дополнительной загрузки процессора.

 Ответ - вы должны простоchoose correct place to call to setSelection()например этоworks для меня:

@Override
public void onResume() {
    super.onResume();

    yourSpinner.setSelection(pos);
 }

But it won't work in onCreateView(), Я подозреваю, что это является причиной интереса к этой теме.

Секрет в том, что с Android вы не можете делать все, что хотите, любым способом - упс :( - компоненты могут просто не быть готовы. В качестве другого примера - вы не можете прокручивать ScrollView ни в onCreateV, iew (), ни в onResume ( ) (см. ответВот)

 23 сент. 2014 г., 01:03
Спасибо. Я не знал, что у фрагментов есть метод onResume.
 18 мар. 2015 г., 07:19
Я мог бы дать +18, чтобы ваш ответ был выше @Marco HC. Вы единственный, кто пытается делать вещи так, как это должно быть сделано

Если у вас есть список контактов, вы можете пойти на это:

((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));

Ни один из этих ответов не дал мне решения, работал только с этим:

mySpinner.post(new Runnable() {
    @Override
    public void run() {
        mySpinner.setSelection(position);
    }
});
 12 авг. 2014 г., 15:30
Спасибо, что сработало! Кстати работает и для ListView.post.run () executeItemClick ()
 06 мар. 2019 г., 16:35
Это должно быть помечено как правильный ответ.
 20 июн. 2014 г., 12:14
Я вызываю SetSelection () сразу после setAdapter (). При этом всегда отображается 1-й элемент (Android 2.3), даже самый хороший выбран в dropView. Ваше решение сделало это для меня.
Решение Вопроса

Используйте следующее: spinnerObject.setSelection(INDEX_OF_CATEGORY2).

 01 мая 2014 г., 11:06
sexSpinner.setSelection (adapter.getPosition (mUser.getGender ()) == -1? 0: adapter.getPosition (mUser.getGender ()));
 11 апр. 2014 г., 19:10
в случае, если у вас нет адаптера для ссылки. mySpinner.setSelection (((ArrayAdapter) mySpinner.getAdapter ()) GetPosition (& Quot;. Значение & Quot;));
 17 мая 2015 г., 21:52
Это не работает, если Spinner имеет onItemSelectedListener (). Слушатель не будет вызван.
 20 июн. 2014 г., 12:14
Вызов SetSelection () сразу после того, как setAdapter (), кажется, всегда отображает 1-й элемент (Android 2.3), даже самый хороший выбран в dropView. добавление view.post () (ответ @Marco Hernaiz Cao) исправит это для меня.
 Boardy17 июн. 2012 г., 18:01
Спасибо, это сработало отлично, пока я делал это, я также нашел способ получения индекса без необходимости циклически проходить через адаптер. Я использовал следующееmySpinner.setSelection(arrayAdapter.getPosition("Category 2"));

Вы можете легко установить это так: spinner.setSelection (1), вместо 1, вы можете установить любую позицию списка, которую вы хотели бы показать.

Это работа для меня.

 spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
 30 июн. 2018 г., 00:18
Поскольку он начинается с 0, поэтому мы должны добавить его, чтобы получить правильный ответ
 29 июн. 2018 г., 22:08
а как насчет +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);
        }
    }
}

This is stated in comments elsewhere on this page but thought it useful to pull it out into an answer:

При использовании адаптера я обнаружил, чтоspinnerObject.setSelection(INDEX_OF_CATEGORY2) должно произойтиafter setAdapter вызов; в противном случае первый элемент всегда является первоначальным выбором.

// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);

Это подтверждается обзором AbsSpinnerкод заsetAdapter.

 12 сент. 2018 г., 15:07
Конечно, вы можете выбрать элемент только после того, как адаптер был заполнен.
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);
 29 авг. 2013 г., 01:03
Почему предполагается, что это CursorAdapter? SpinnerAdapter работает так же хорошо.
 17 июн. 2012 г., 17:50
Он заполняет категории из базы данных, там должен быть идентификатор для каждой категории.
 17 июн. 2012 г., 17:47
Ошибка с этим кодом в том, что @Boardy хочет выбратьCategory 2 который я предполагаю, является строкой (при условии, что он пытался использоватьSpinner.SelectedText = "Category 2") но приведенный выше код дляlong.

Ваш ответ на вопрос