2015-10-26 3 views
2

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 мс, не работает каждый раз. Что мне делать?

+0

вместо 'postDelayed' просто использовать' Post', нет необходимости для магии '1000' мс – pskink

+0

' Post' работает, но только второй раз, когда я запускать эту функцию. Мне нужен способ выполнить 'fromSpinner.setSelection (...)' только после того, как функция setUnitSpinnerAdapter (...) 'закончена. –

+0

Какова ваша реальная проблема? зачем вообще использовать Handler? – pskink

ответ

0

попробовать:

fromSpinnerAdapter.notifdatachanged(); 
+0

что это? адаптер не имеет такого метода. даже если вы имеете в виду 'notifyDataSetChanged', он не имеет ничего общего с проблемой OP – pskink

+0

, например, с обновлениями адаптера обновления после u setSelection.so, когда u delay, он становится правильным. что это? более детально . –

+0

Я понятия не имею, о чем вы говорите ... – pskink

Смежные вопросы