В настоящее время я пытаюсь интегрировать функцию поиска в реальном времени в Android.Я использую настроенный виджет автозаполнения.Сам виджет предоставляет мне порог для запуска запроса только после того, как набрано определенное количество символов. Но я также хочу, чтобы запрос запускался только, скажем, если пользователь прекратил печатать в течение 2 секунд.
Когда я загружал свое содержимое с помощью AsyncTask
, я попытался заблокировать функцию doInBackground
, вызвав Thread.sleep () в самом начале.Если пользователь продолжит вводить программу, она позаботится о существующей задаче, отменит ее и запустит новую.Это была моя идея.Но это не совсем так, как я ожидал.Иногда он отправляет запросы, даже если пользователь все еще печатает, иногда запросы отменяются после того, как пользователи перестали печатать.
У вас есть идеи по этому поводу или, возможно, лучший способ решить эту проблему?
Вот фрагменты кода:
1.Функция, которая вызывается для текста, изменяется:
public void afterTextChanged(Editable s) {
if(mWidget.enoughToFilter()) {
if(mTask != null && mTask.getStatus() != Status.FINISHED) {
mTask.cancel(true);
}
mTask = new KeywordSearchLoader(mActivity,
mItems);
mTask.execute(s.toString());
}
}
2.doInBrackground
try {
Thread.sleep(Properties.ASYNC_SEARCH_DELAY);
} catch (InterruptedException e) {
Log.e(TAG, "the process was interrupted while sleeping");
Log.w(TAG, e);
}
Спасибо, Фил