我有一个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秒没有更多的投入情况,然后过滤列表。 任何建议家伙?
我怎样才能让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();
}
}
使用RxBinding :
RxTextView.textChanges(edittext)
.skipInitialValue()
.debounce(TIME_TO_WAIT, TimeUnit.MILLISECONDS)
.subscribe({
//do the thing
})
}