文档章节

两种方式实现延迟搜索

 罗小飞f
发布于 2017/02/10 15:30
字数 361
阅读 1
收藏 0

输入图片说明

类似知乎搜索这样的,当此次输入超过设定的间隔时间就自动搜索。 有两种简单的实现方法供大家参考一下: 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
作品 0
私信 提问
程序员小冰/DialogLoadding

DialogLoadding 作者:程序员小冰 欢迎点击关注微博 长期维护的Android项目,里面包括常用功能实现,以及知识点详解, 当然还有Java中的知识点。 Android利器 开源项目: 具体请看github: ...

程序员小冰
2017/08/09
0
0
Kotlin 设计模式之单例模式

现在 Kotlin 的趋势日益高涨,Jake Wharton 大神近期从 Square 公司离职到 Google 负责 Kotlin 部分。我最近分析了 Kotlin 下的单例模式的实现方式,与 Java 下的实现有点区别,之前写过一篇...

JohnnyShieh
2017/08/24
0
0
延迟加载有助于提升性能和降低内存使用率

当有许多对象和大数据结构是懒加载或者赋值状态时其程序性能会得到提升,将费时的操作近可能的缩短-理论上不太可能。我得展现些例子在java中怎样使用延迟技术并给你们引导其他语言的及更早语...

oschina
2013/01/24
2.3K
3
Spring IoC之Bean管理

Spring对Bean的管理包括Bean的初始化、Bean的注入、Bean的生命周期管理、Bean的作用域管理....等。Spring提供了三种实例化Bean的方式:使用类构造器、使用静态工厂类、使用工厂类;Spring通过...

Mr_YangFei
2016/03/29
69
0
一张图带你理解和实现RabbitMQ的延迟队列功能

开头 先熟悉下面会用到的一些名词~ exchange: 交换机 routingkey: 路由key queue: 队列 exchange和queue是需要绑定在一起的,然后消息发送到exchange再由exchange通过routingkey发送到对应的...

冬天只爱早晨
2018/06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
27分钟前
0
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
44分钟前
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部