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


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

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

  • категория 1
  • категория 2
  • 3

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

17 293

17 ответов:

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

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

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(spinner_adapter.getPosition(selected_value)+1);

вы можете легко установить так: 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) требуется после the setAdapter вызов; в противном случае первый элемент всегда является начальным выбором.

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

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

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

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

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