Ответ 1
Это работает отлично для меня и менее сложно:
ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
В моем макете есть AutoCompleteTextView. У меня также есть альтернативный способ выбора тех же элементов, которые присутствуют в AutoCompleteTextView. Когда выбран альтернативный способ, я заполняю значение в AutoCompleteTextView с помощью:
autoCompleteTextView.setText(valueFromAlternativeSource);
где valueFromAlternativeSource
- одна из допустимых опций автоматического завершения. Проблема заключается в том, что выпадение автозаполнения появляется при вызове setText. Помещение следующей строки после вышеописанного не работает:
autoCompleteTextView.dismissDropDown(); //Doesn't work. Why?
Любые идеи о том, почему увольнение dropdown не работает, или другие способы отклонить выпадающее меню?
Это работает отлично для меня и менее сложно:
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, Подкласс 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.