我有一个 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/