Intereting Posts
Android: определение того, должен ли код находиться в действии или пользовательском представлении Прокрутка второго дочернего элемента в AppBarLayout Телефонная связь и подсказка () Android studio 2.0 Preview 8 с плагином 2.0.0-alhpa8, предупреждение о сохранении памяти, несмотря на размер кучи до 4 ГБ Позиция курсора EditText Как установить разделитель (до нуля) настраиваемого макета ListFragment Глобальный неперехваченный обработчик исключений -> журнал электронной почты для меня? Отображать всю музыку на SD-карте Qt на андроиде, уменьшая двоичный размер Java Android, как я могу сделать ImageView темнее onClick Bluetooth Low Energy startScan на Android 6.0 не находит устройства Android Preference Image Picker – как получить результат в DialogPreference Android: не удается завершить установку из-за конфликтной зависимости LocalStorage не поддерживается с помощью Phonegap Android: поддерживаемые устройства обратного вызова обратного изображения

Как заставить TextWatcher ждать некоторое время, прежде чем делать какие-либо действия

У меня есть EditText чтобы фильтровать элементы в ListView под ним, которые могут содержать более 1000 элементов. TextWatcher :

 txt_itemSearch.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { fillItemList(); } public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }); 

Проблема здесь в том, что с каждой буквы, введенной пользователем, список становится обновленным, и это повторное обновление списка, которое заставляет пользовательский интерфейс работать медленно.

Как заставить TextWatcher ждать 1-2 секунды, и если через 2 секунды не произойдет больше ввода, отфильтруйте список. Любые предложения ребята?

Solutions Collecting From Web of "Как заставить TextWatcher ждать некоторое время, прежде чем делать какие-либо действия"

Как заставить TextWatcher ждать 1-2 секунды, и если после 2 секунд не будет больше ввода, отфильтруйте список.

Как я уже сказал в комментарии, вы должны изучить использование метода getFilter() адаптера. Поскольку это может оказаться неприемлемым (как вы говорите), попробуйте реализовать тот же механизм, который использует фильтр адаптера для отмены между входами фильтра.

 private Handler mHandler = new Handler(); public void afterTextChanged(Editable s) { mHandler.removeCallbacks(mFilterTask); mHandler.postDelayed(mFilterTask, 2000); } 

Где filterTask :

 Runnable mFilterTask = new Runnable() { @Override public void run() { fillItemList(); } }