如何使TextWatcher等待一段时间做一些动作之前(How to make TextWatche

2019-08-16 17:35发布

我有一个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秒没有更多的投入情况,然后过滤列表。 任何建议家伙?

Answer 1:

我怎样才能让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();
     }       
}


Answer 2:

使用RxBinding :

RxTextView.textChanges(edittext)
            .skipInitialValue()
            .debounce(TIME_TO_WAIT, TimeUnit.MILLISECONDS)
            .subscribe({
               //do the thing
            })
}


文章来源: How to make TextWatcher wait for some time before doing some action