android - 如何让 TextWatcher 在执行某些操作之前等待一段时间

标签 android android-listview android-edittext 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) {
}
});

这里的问题是,随着用户键入的每个字母,列表都会刷新,正是这种重复的列表更新导致 UI 变慢。

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

最佳答案

How can I make the textWatcher wait for 1-2 secs and if no more input happens after 2 secs, then filter the list.

正如我在评论中所说,您应该考虑使用适配器的 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();
     }       
}

关于android - 如何让 TextWatcher 在执行某些操作之前等待一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660636/

相关文章:

android - 如果 EditText 上的字符不符合要求的长度,则显示警告

android - 在 Android Studio 中更改矢量 Assets 的填充颜色

android - 如何在android listview中保持滚动条的位置?

java - wsdl2java 生成 Array Of<Type> 而不是 Type

java - 应用程序只是强制关闭并停止工作,为什么?

android - 如何清除 ListView 回收站中的 View ?

android - 带有 EditText 的对话框 fragment 在加载后自动显示键盘

android - View.post() 没有被调用?

android - 平滑删除自定义 ListView 中的项目

java - 每行带有 TextView 和 EditText 的 ListView