RxJava实例-用debounce实现的简单即时搜索
2017-05-16 09:43
239 查看
效果图
debounce.gif说明
运用debounce操作符进行文本搜索,输入单个字符并不会触发搜索,而是在等待一定时间后才触发搜索。debounce
image.png上面这个图并不是很直观,换一个图
image.png
debounce的意思是“去除抖动”,debounce操作符对源Observable每产生一个结果后,如果在规定的间隔时间内没有别的结果产生,则把这个结果提交给订阅者处理,否则忽略该结果。
主要代码
subscription = Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(final Subscriber<? super String> subscriber) { mEtSearch.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) { subscriber.onNext(s.toString()); } @Override public void afterTextChanged(Editable s) { } }); } }) .debounce(500, TimeUnit.MILLISECONDS) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { if (!TextUtils.isEmpty(s)) return true; return false; } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { log("subscriber -> onCompleted"); } @Override public void onError(Throwable e) { log("subscriber -> onError ->" + e.getMessage()); } @Override public void onNext(String s) { log(s); } });
监听EditView里的文字改变,然后用debounce规定时间间隔为500ms,相隔500ms以上的改变才允许通过输出log。
源代码
Demo地址:https://github.com/jiangkang/KTools.git相关文章推荐
- 简单实现搜索框 即时搜索
- vue 实现简单的关键词搜索实例
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- java IO实现电脑搜索、删除功能的实例
- Eclipse下mahout实现推荐的简单实例
- js实现简单登录功能的实例代码
- C#实现简单的Login窗口实例
- 利用ajax实现简单的注册验证局部刷新实例
- java 实现MD5加密算法的简单实例
- SVN绑定RTX 即时提醒,比较简单的实现
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
- Rxjava - 简单实现
- Java经典实例:实现一个简单堆栈
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- PHP实例:用PHP简单实现多条件查询
- 将form表单通过ajax实现无刷新提交的简单实例
- javascript实现抽奖程序的简单实例
- 自定义View时,用到Paint Canvas的一些温故,只有想不到没有做不到(实例 1,画一个简单的Activity并且实现他能实现的)
- JavaScript利用Date实现简单的倒计时实例
- Javascript实现简单二级下拉菜单实例