Отключить Android AutoCompleteTextView после того, как пользователь выбирает элемент из выпадающего - PullRequest
14 голосов
/ 08 ноября 2011

Я использую Android AutoCompleteTextView с CursorAdapter, чтобы добавить автозаполнение в приложение.В представлении onItemClickListener() (т. Е. Когда пользователь касается одного из выпадающих элементов автозаполнения), я извлекаю текст и помещаю его в EditText, чтобы пользователь мог изменить его при необходимости.

Однакокогда я вызываю setText() в TextView, происходит автозаполнение, и снова отображается раскрывающийся список.Я хотел бы показать раскрывающийся список, только если пользователь вводит новый текст с клавиатуры.Есть ли способ сделать это?

Ответы [ 5 ]

16 голосов
/ 08 ноября 2011

Вы можете использовать метод dismissDropDown() объекта AutoCompleteTextView.Взгляните на документацию .

6 голосов
/ 15 октября 2012

Если вы хотите закрыть раскрывающийся список AutoCompleteTextView, вам следует использовать его метод post (Runnable r). У меня работает :) 1001 *

Вот пример:

mAutoCompleteTextView.post(new Runnable() {
    public void run() {
        mAutoCompleteTextView.dismissDropDown();
    }
}
2 голосов
/ 08 ноября 2011

Отвечая на мой собственный вопрос после нескольких часов хакерской проверки: получается, что вы должны реализовать свой собственный OnItemClickListener и вместо этого полагаться на существующий прослушиватель щелчков, чтобы заполнить TextView.Первоначально я реализовал onItemClickListener, потому что он использовал результаты Cursor.toString () для заполнения текстового представления.Чтобы изменить выходную строку, вы должны реализовать convertToString(Cursor) в вашем CursorAdapter.Возвращаемая последовательность CharSequence будет заполнена в текстовом представлении.

Это также предотвратит повторное отображение раскрывающегося списка (поскольку setText () запускает поведение завершения, а по умолчанию onItemClickListener - нет).

1 голос
/ 17 августа 2018

Когда мы нажимаем на пункт, предложенный в 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) {

    }
});
0 голосов
/ 03 июля 2018

Другой подход.Я согласился dismissDropDown() работает, но в моем случае это не сработало, как ожидалось.Итак, я использовал:

autoCompleteTextView.setDropDownHeight(0);

И если вы хотите снова показать выпадающий список, вы используете

autoCompleteTextView.setDropDownHeight(intValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...