AutoCompleteTextView занимает много времени для поиска в огромной базе данных Sqlite

У меня есть собственное словарное приложение WordYard, и всякий раз, когда мы вводим AutoCompleteTextView, я показываю список слов в раскрывающемся списке.

В addTextChangedListener autoCompleteTextView я запрашиваю письменный текст в базе данных sqlite. Поскольку база данных очень велика из 1,5 лаковых слов, требуется время, чтобы сделать массив определенного текста.

Предположим, я написал «A», тогда эта строка будет искаться в базе данных и записываться внутри массива данных с ограничением 15, начиная с «A». При прокрутке раскрывающегося списка я добавляю следующие 15 слов в getView адаптера.

Прокрутка в порядке, но всякий раз, когда я набираю autocompleteTextview, чтобы прочитать 15 слов из базы данных, также требуется время, если мы пишем быстрее. Пожалуйста, скажите мне, есть ли какой-либо другой способ сделать мое приложение лучше.


person sajal    schedule 02.03.2015    source источник
comment
Разместите свой код, если это возможно.   -  person Skizo-ozᴉʞS    schedule 02.03.2015
comment
вам вообще не нужен addTextChangedListener/TextWatcher, см. мой ответ здесь: stackoverflow.com/a/19860624/2252830   -  person pskink    schedule 02.03.2015


Ответы (1)


Каждый раз, когда вы вводите что-либо в пределах AutoCompleteTextView, отправляется запрос в вашу относительно огромную базу данных, что вызывает (оправданную) задержку.

Для работы метода addTextChangedListener (TextWatcher watcher); требуется объект TextWatcher. Что вы собираетесь сделать, так это создать TextWatcher и переопределить его метод afterTextChanged (Editable s), чтобы реже выполнять запросы к вашей базе данных. Для этого вам также понадобится пользовательский Filter.

autoCompleteTextView.addTextChangedListener(new TextWatcher() {
   public void onTextChanged(CharSequence s, int start, int before, int count) {
      yourAdapter.getFilter().filter(s);
   }

затем вы создадите класс, расширяющий [Filter][1], и переопределите методы, соответствующие вашим потребностям.

Например, оптимизируйте свою реализацию, чтобы отправлять запросы только после ввода 4 символов или по прошествии некоторого времени.

person George Daramouskas    schedule 02.03.2015
comment
Спасибо, возможно ли, чтобы вы написали пример кода для пользовательского фильтра - person Pulkit; 19.08.2018