如何让TextWatcher在做一些操作之前等待一段时间

des*_*mad 10 android textwatcher android-listview android-edittext

我有一个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) {
}
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是,对于用户键入的每个字母,列表都会刷新,这是重复列表更新,导致UI变慢.

如何TextWatcher等待1-2秒,如果2秒后没有更多输入,则过滤列表.有什么建议吗?

Luk*_*rog 17

如何让textWatcher等待1-2秒,如果2秒后没有更多输入,则过滤列表.

正如我在评论中已经说过的那样,您应该考虑使用getFilter()适配器的方法.因为这可能不合适(如你所说)尝试实现适配器的过滤器用于在过滤器输入之间取消的相同机制.

private Handler mHandler = new Handler();

public void afterTextChanged(Editable s) {
      mHandler.removeCallbacks(mFilterTask); 
      mHandler.postDelayed(mFilterTask, 2000);
}
Run Code Online (Sandbox Code Playgroud)

在哪里filterTask:

Runnable mFilterTask = new Runnable() {

     @Override
     public void run() {
          fillItemList();
     }       
}
Run Code Online (Sandbox Code Playgroud)