文档章节

两种方式实现延迟搜索

 罗小飞f
发布于 2017/02/10 15:30
字数 361
阅读 0
收藏 0
点赞 0
评论 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

[RK3288][Android6.0] face++人脸搜索API测试接口实现流程

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: 需求: 在线人脸搜索 评估方案: face++的在线人脸搜索功能 评估参数: 搜索的响应时间 识别的置信度 当样本数量增大后的延迟以及...

kris_fei ⋅ 05/25 ⋅ 0

Kotlin 设计模式之单例模式

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

JohnnyShieh ⋅ 2017/08/24 ⋅ 0

基于消息循环的定时器

概述 Android定时器实现一般来说, 包括以下两种: java.util.Timer android.app.AlarmManager 除此之外, 其实还有一种方式可以实现定时器的效果, 即利用消息循环的Handler来实现. 定时器 众所...

有初啊 ⋅ 2013/11/29 ⋅ 0

百度地图开发POI(三)

我们经常需要在地图上显示一些特别的东西,比如一些服务如银行,KFG,学校等等,这样就需要使用POI搜索,基本上的步骤如下 0.所需要的变量 //POI搜索 private MyPoiOverlay mTrafficOverLay;// 交...

SunnyTime ⋅ 2015/12/30 ⋅ 0

【创意源码】几个创意源码作品分享

1、云相册(作者:Steven) 该项目是一款基于人脸识别注册和登录,并支持分享的云相册。登陆模块采用了两种登陆方式,一种是基于Face++的人脸识别登陆,另一种方式是基于Bmob数据库的账号密码...

牵着蜗牛去西藏 ⋅ 2014/11/27 ⋅ 4

详细介绍Spring Boot + RabbitMQ实现延迟队列

背景 何为延迟队列? 顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。而一般的队列,消息一旦入队了之后就会被消费者马上消费。 延迟队列能做什么? 延迟队列多用于需要延迟工作...

wooyoo ⋅ 2017/11/21 ⋅ 0

详细介绍Spring Boot + RabbitMQ实现延迟队列

背景 何为延迟队列? 顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。而一般的队列,消息一旦入队了之后就会被消费者马上消费。 延迟队列能做什么? 延迟队列多用于需要延迟工作...

wooyoo ⋅ 2017/11/21 ⋅ 0

Spring IoC之Bean管理

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

Mr_YangFei ⋅ 2016/03/29 ⋅ 0

一张图带你理解和实现RabbitMQ的延迟队列功能

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

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何使用serverchan微信推送告警

之前实现推送告警信息到微信的方法有如下几种: 1、通过企业公众号实现----收费: 2、通过QQ邮箱,在微信平台上开启收到邮件进行提醒; 3、第三方告警平台API,一般也是收费的; 不过最近看文...

问题终结者 ⋅ 18分钟前 ⋅ 0

TCP的RPC

RPC就是远程方法调用(Remote Process Call ),包含了客户端和服务端,涉及了对象的序列化传输。 1.服务端启动,注册远程调用的类2.客户端发送请求信息包含类、方法、参数的一些信息、序列化传...

Cobbage ⋅ 39分钟前 ⋅ 0

IOS-UI UI初步代码布局添加事件

ISO开发界面,UI是必须学习的一部分,其实很早之前想学来了,一直没有沉下心来学习。看到IOS的代码风格和布局就别扭的不行,跟java代码和android布局比较显得不是那么方便,所以一直到现在。...

京一 ⋅ 49分钟前 ⋅ 0

浅谈OpenDaylight的二次开发

OpenDaylight作为一款开源SDN网络控制器,依托于强大的社区支持以及功能特性,成为了目前主流的SDN网络控制器开发平台。在比较稳定的OpenDaylight Helium版本中,已经为开发者提供了大量的网...

wangxuwei ⋅ 58分钟前 ⋅ 0

API 开发中可选择传递 token 接口遇到的一个坑

在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更...

等月人 ⋅ 59分钟前 ⋅ 0

Java NIO之文件处理

程序要操作本地操作系统的一个文件,可以分为以下三个部分: 对文件位置的操作 对文件的操作 对文件内容的操作 其中,对文件内容的操作在 Java NIO之Channel 中已经有了介绍,通过FileChann...

士别三日 ⋅ 今天 ⋅ 0

Maven的pom.xml配置文件详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.......

小海bug ⋅ 今天 ⋅ 0

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 今天 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 今天 ⋅ 0

Redis入门详解(转)

Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis应用场景 Redis总结 Redis简介: Redi...

xiaoyaoyoufang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部