两种方式实现延迟搜索
两种方式实现延迟搜索
罗小飞f 发表于11个月前
两种方式实现延迟搜索
  • 发表于 11个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

输入图片说明

类似知乎搜索这样的,当此次输入超过设定的间隔时间就自动搜索。 有两种简单的实现方法供大家参考一下: Handler RxJava

Handler

监听EditText的输入,每当文本变化,先检查Handler当前有无未处理的消息,有则移除该消息,然后用sendEmptyMessageDelayed再发送一条延迟消息,如若文本超过延迟时间没有变化,该延迟消息就可以成功执行

private final int RC_SEARCH = 1;
private final int INTERVAL = 300; //输入时间间隔为300毫秒
private EditText mEtHandler;

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == RC_SEARCH) {
                handlerSearch();
            }
        }
    };

mEtHandler.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {

                if (mHandler.hasMessages(RC_SEARCH)) {
                    mHandler.removeMessages(RC_SEARCH);
                }
                mHandler.sendEmptyMessageDelayed(RC_SEARCH, INTERVAL);
            }
        });

RxJava

学了RxJava后发现还有更简便的方法,即使用debounce操作符处理不断产生的文本变化事件 debounce操作符对源Observable每产生一个结果后,如果在规定的间隔时间内没有别的结果产生,则把这> 个结果提交给订阅者处理,否则忽略该结果

private EditText mEtRxJava;

private final int INTERVAL = 300; //输入时间间隔为300毫秒

RxTextView.textChangeEvents(mEtRxJava)
                .debounce(INTERVAL, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<TextViewTextChangeEvent>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(TextViewTextChangeEvent textViewTextChangeEvent) {
                        rxJavaSearch();
                    }
                });

输入图片说明

参考资料:

http://blog.csdn.net/theone10211024/article/details/50435325

http://blog.csdn.net/Job_Hesc/article/details/46495281

共有 人打赏支持
粉丝 0
博文 2
码字总数 0
×
罗小飞f
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: