Android showDropDown onCreate не работает
Таким образом, у меня есть представление автозаполнения, которое показывает выпадающее меню, когда я печатаю... Но я хочу, чтобы выпадающий список был показан, когда начнется avtivity. Поэтому я нашел этотОтвет , который говорит, что использование showDropDown()
должно работать. И это действительно работает в моем случае, когда вызывается любой TouchListener или любое другое событие, вызванное пользователем. Но это не работает, если я просто использую его в onCreate()... Следующий код в my onCreate () работает
final AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteUserName);
String[] users = getResources().getStringArray(R.array.users);
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this,R.layout.compose_ac_list_item,users);
actv.setAdapter(adapter);
actv.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// WORKS IF USED ON TOUCH
actv.showDropDown();
return false;
}
});
И следующее не работает
final AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteUserName);
String[] users = getResources().getStringArray(R.array.users);
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this,R.layout.compose_ac_list_item,users);
actv.setAdapter(adapter);
actv.showDropDown();
1 ответ:
Потому что при вызове
setAdapter
требуется некоторое время, чтобы раздуть все элементы списка. В течение этого времени, если вы вызоветеshowDropDown()
, listview еще не раздулся, поэтому он не сможет показать выпадающее меню. Вы могли бы дать некоторую задержку перед вызовомshowDropDown()
. Но я не уверен, что это эффективное решение, поскольку мы не будем точно знать, сколько времени потребуется, чтобы раздуть пункты списка.actv.setAdapter(adapter); new Handler().postDelayed(new Runnable() { @Override public void run() { actv.showDropDown(); } }, 500);