Как я могу избежать выпадающего списка автозаполнения, появляющегося при программном наборе текста?

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

autoCompleteTextView.setText(valueFromAlternativeSource); 

Где valueFromAlternativeSource является одним из допустимых параметров автозаполнения. Проблема заключается в том, что выпадение автозаполнения появляется при вызове setText. Помещение следующей строки после вышеописанного не работает:

 autoCompleteTextView.dismissDropDown(); //Doesn't work. Why? 

Любые идеи о том, почему увольнять выпадающий список не работают, или другие способы, чтобы я мог отклонить раскрывающийся список?

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

 ListAdapter adapter = autoCompleteTextView.getAdapter(); autoCompleteTextView.setAdapter(null); autoCompleteTextView.setText("whatever"); autoCompleteTextView.setAdapter(adapter); 

Похоже, что проблема в том, как обрабатываются сообщения. Моя работа выглядит так:

 //autoCompleteTextView.dismissDropDown(); new Handler().post(new Runnable() { public void run() { autoCompleteTextView.dismissDropDown(); }}); 

Если вы хотите поддерживать API <17, Subclass AutoCompleteTextview и переопределить метод setText(text, filter)

 @Override public void setText(CharSequence text, boolean filter) { if(Build.VERSION.SDK_INT>=17) { super.setText(text, filter); }else{ if(filter){ setText(text); }else{ ListAdapter adapter = getAdapter(); setAdapter(null); setText(text); if(adapter instanceof ArrayAdapter) setAdapter((ArrayAdapter) adapter); else setAdapter((CursorAdapter) adapter); //if you use more types of Adapter you can list them here } } } 

Затем, когда вы хотите установить текст вручную, вызовите setText(text, false)

Мое решение (но мне это не нравится, должно быть что-то лучше):

 autoCompleteTextView.setText(valueFromAlternativeSource); autoCompleteTextView.setDropDownHeight(0); autoCompleteTextView.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT); } } 
 autoCompleteTextView.setText(valueFromOtherMeans, filter); * @param filter If <code>false</code>, no filtering will be performed * as a result of this call.