unitSpinner устанавливает fromSpinner и toSpinner адаптеры на основе выбора, как это:Spinner setSelection() не работает без postDelayed Runnable
unitSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
setUnitSpinnerAdapter(areaHeaders);
break;
.
.
.
case 12:
setUnitSpinnerAdapter(volumeHeaders);
break;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
setUnitSpinnerAdapter:
public void setUnitSpinnerAdapter(String[] headers) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_item, headers);
adapterUnits.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fromSpinner.setAdapter(adapter);
toSpinner.setAdapter(adapter);
}
Я называю это
unitSpinner.setSelection(getIndex(unitSpinner, cur.getString(1)));
fromSpinner.setSelection(getIndex(fromSpinner, cur.getString(2)));
toSpinner.setSelection(getIndex(toSpinner, cur.getString(3)));
getIndex:
private int getIndex(Spinner spinner, String myString) {
int index = 0;
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).toString().equals(myString)) {
index = i;
break;
}
}
return index;
}
fromSpinner и toSpinner адаптеры устанавливаются новые значения, как изменение выбора unitSpinner но setSelection на них не работает, так как GetIndex сравнивает старые адаптеры и возвращает индекс в 0, если я не делаю это:
unitSpinner.setSelection(getIndex(unitSpinner, cur.getString(1)));
new Handler().postDelayed(new Runnable() {
public void run() {
fromSpinner.setSelection(getIndex(fromSpinner, cur.getString(2)));
toSpinner.setSelection(getIndex(toSpinner, cur.getString(3)));
}
}, 1000);
Это делает мой приложение кажется медленным, так как я должен ждать 1000 мс, чтобы увидеть изменения. Установка меньшего времени ожидания, такого как 100 мс, не работает каждый раз. Что мне делать?
вместо 'postDelayed' просто использовать' Post', нет необходимости для магии '1000' мс – pskink
' Post' работает, но только второй раз, когда я запускать эту функцию. Мне нужен способ выполнить 'fromSpinner.setSelection (...)' только после того, как функция setUnitSpinnerAdapter (...) 'закончена. –
Какова ваша реальная проблема? зачем вообще использовать Handler? – pskink