文档章节

两种方式实现延迟搜索

 罗小飞f
发布于 2017/02/10 15:30
字数 361
阅读 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
0
Kotlin 设计模式之单例模式

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

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

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

kris_fei
05/25
0
0
计算成本降低35倍!谷歌发布手机端自动设计神经网络MnasNet

【新智元导读】神经结构自动搜索是最近的研究热点。谷歌大脑团队最新提出在一种在移动端自动设计CNN模型的新方法,用更少的算力,更快、更好地实现了神经网络结构的自动搜索。 论文下载: ht...

技术小能手
08/08
0
0
详细介绍Spring Boot + RabbitMQ实现延迟队列

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

wooyoo
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ReentrantLock_可重入

package cunrent;import java.util.Calendar;import java.util.concurrent.locks.ReentrantLock;public class TestReentrantLock { public static void main(String[] args......

noteman
35分钟前
2
0
CentOS7下安装mysql5.7

1、安装YUM Repo 由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。 wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 然后进行repo的安...

JungleKing
42分钟前
2
0
DevExpress v18.1新版亮点——DevExtreme篇(三)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExtreme JavaScript Controls v18.1 的新功能,快来下载试用新版本!点击下载...

Miss_Hello_World
43分钟前
1
0
LoadRunner 安装

如果安装LoadRunner 11时弹窗提示"Micosoft Visual C++ 2005 SP1 可再发行组件包(X86):'命令行选项语法错误。键入命令 / ? 可获得帮助信息'"。或者弹窗提示"此计算机缺少 vc2005_sp1_wit...

ww1234
52分钟前
1
0
两个时间段相隔自然月Util

public class DateUtil { public static int getDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calend......

木九天
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部