Intereting Posts
Создавайте бесплатные / платные версии приложения из того же кода Получить контекст приложения во фрагменте в Android? Как перенести Cloud Endpoints сгенерирована библиотека sources.jar в проект Android Preferexternal в манифесте не работает при установке с рынка Android-залп отправляет информацию дважды с загрузкой изображения Я хочу ссылаться на не конечную переменную внутри внутреннего класса, определенного другим способом Android FB API 3.0 – установить разрешения только один раз Идентификация мобильного устройства с использованием Nmap Как получить первый день текущей недели и месяца? Android: если маркеры перекрываются друг с другом на карте, то событие click запускается для последнего скрытого Белые лейблы Android и приложений IOS Как удалить из базы данных реального времени firebase? Приложение Phonegap умирает в фоновом режиме при сборе местоположения Отключить анимацию перехода между действиями Как добавить прокручиваемый заголовок в gridview в 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(); } }