Отключить Android AutoCompleteTextView после того, как пользователь выберет элемент из раскрывающегося списка
Я использую Android AutoCompleteTextView
с CursorAdapter
, чтобы добавить автозаполнение в приложение. В представлении onItemClickListener()
(т.е. Когда пользователь касается одного из автозаполненных выпадающих элементов), я извлекаю текст и помещаю его в EditText, чтобы пользователь мог изменить его, если ему нужно.
Однако, когда я вызываю setText()
в TextView, запускается поведение автозаполнения, и выпадающее меню отображается снова. Я бы хотел показать только раскрывающийся список, если пользователь вводит новый текст с клавиатуры. Есть ли способ сделать это?
Ответы
Ответ 1
Отвечая на мой собственный вопрос после пары часов взлома на это: Оказывается, вы должны реализовать свой собственный OnItemClickListener
и вместо этого полагаться на существующий прослушиватель кликов для заполнения TextView. Первоначально я реализовал onItemClickListener, потому что он использовал результаты Cursor.toString() для заполнения текстового представления. Чтобы изменить выходную строку, вы должны реализовать convertToString(Cursor)
в своем CursorAdapter. Возвращаемое CharSequence будет заполнено в текстовом представлении.
Это приведет к тому, что выпадающее меню не появится снова (поскольку setText() запускает поведение завершения, но по умолчанию onItemClickListener не работает).
Ответ 2
Вы можете использовать метод dismissDropDown()
объекта AutoCompleteTextView. Взгляните на документацию.
Ответ 3
Если вы хотите раскрывать раскрывающееся меню AutoCompleteTextView, вы должны использовать метод post (Runnable r). Это работает для меня:)
Вот пример:
mAutoCompleteTextView.post(new Runnable() {
public void run() {
mAutoCompleteTextView.dismissDropDown();
}
}
Ответ 4
Когда мы нажимаем на элемент, предложенный в AutoCompleteTextView.onTextChanged()
выполняется перед onItemClick
Итак, чтобы избежать этого, попробуйте код ниже.
autocompletetextview.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (autocompletetextview.isPerformingCompletion()) {
// An item has been selected from the list. Ignore.
} else {
// Perform your task here... Like calling web service, Reading data from SQLite database, etc...
}
}
@Override
public void afterTextChanged(final Editable editable) {
}
});
Ответ 5
Разный подход. Я согласился, что у dismissDropDown()
работает dismissDropDown()
но в моем случае он работал не так, как ожидалось. Итак, я использовал:
autoCompleteTextView.setDropDownHeight(0);
И если вы хотите снова отобразить раскрывающийся список, вы используете
autoCompleteTextView.setDropDownHeight(intValue);