Как заставить 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(); } }