RxAnroid之UI控件(View、Widget)RxBinding(同时异步执行多个Observable、同时异步执行多个任务)
来源:互联网 发布:什么是返利网和淘宝客 编辑:程序博客网 时间:2024/06/05 10:21
RxBinding是Android种UI控件的Api
将RxJava应用于Android的好处就是更方便地组合各种异步操作,将Android中复杂的UI交互简单化,尤其是当触发多重UI事件时。还可以使用RxJava中过滤、结合、异步、条件等方法,是逻辑简洁、代码易读化。
RX对View的操作需要导入compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
一、异步完成多种事情,全部结束后执行某项操作
经常有这样的需求,需要多种事情完成之后执行某个操作。比如下面的例子中需要下载图片、下载app、下载资源文件,下载所需要的时间都是不确定的,但是需要在所有事情完成之后执行下一步操作,这个例子中只是将下载完成简单地显示到了TextView中
//下载图片 Observable<Boolean> downLoadPics = Async.start(new Func0<Boolean>() { @Override public Boolean call() { try { Thread.sleep(10*1000); } catch (InterruptedException e) { e.printStackTrace(); } Log.e(TAG,"图片下载成功,耗时10s。。。。。。。。。。。。。。"); return true; } }); //下载app Observable<Boolean> downLoadApps = Async.start(new Func0<Boolean>() { @Override public Boolean call() { try { Thread.sleep(5*1000); } catch (InterruptedException e) { e.printStackTrace(); } Log.e(TAG,"app下载成功,耗时5s。。。。。。。。。。。。。。"); return true; } }); //下载资源文件 Observable<Boolean> downLoadRes = Async.start(new Func0<Boolean>() { @Override public Boolean call() { try { Thread.sleep(4*1000); } catch (InterruptedException e) { e.printStackTrace(); } Log.e(TAG,"app下载成功,耗时4s。。。。。。。。。。。。。。"); return true; } }); Observable observable = RxView.clicks(btDownload); observable.combineLatest(downLoadPics, downLoadApps, downLoadRes, new Func3<Boolean, Boolean, Boolean, Object>() { @Override public Object call(Boolean aBoolean, Boolean aBoolean2, Boolean aBoolean3) { Log.e(TAG,"图片、app、资源均下载成功。。。。。。。。。。。。。。"); return aBoolean&&aBoolean2&&aBoolean3; } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Object>() { @Override public void call(Object o) {
<span style="white-space:pre"></span>//10s后才显示 tvRx.setText("所有资源都下载成功了。。。。。。。。。。。。。"); } });
运行结果:
界面显示为:
二、防止按钮被重复点击
int count = -1; private void testRepeatClick() { RxView.clicks(btDownload) .throttleFirst(1, TimeUnit.SECONDS) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { ++count; tvRx.setText(count+""); } }); }
在1s内多次点击,只计数一次
注:1.参考资料:https://github.com/ReactiveX/RxAndroid/wiki#removed
https://github.com/JakeWharton/RxBinding
https://guides.codepath.com/android/RxJava-and-RxBinding
http://blog.csdn.net/theone10211024/article/details/50435325
2.各libray包的bindings
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' //andrioid中view的bindings
compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0' //v4包的bingdings
compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0' //appcompat-v7包的bindings
compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0' //design包的bindings
compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:0.4.0' //recyclerview-v7包的bindings
compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:0.4.0' //leanback-v17包的bindings
- RxAnroid之UI控件(View、Widget)RxBinding(同时异步执行多个Observable、同时异步执行多个任务)
- javascript 实现多个异步函数的同时执行后再执行回调函数
- 多线程异步编程(1):创建多个线程执行任务,同时更新进度条,使用WaitHandle发送信号
- Timer同时执行多个定时任务的例子
- Ajax 同时处理多个异步请求
- 异步执行多个查询
- python爬虫scrapy之如何同时执行多个scrapy爬行任务
- 【BASH】同时执行多个命令
- 实现多个手势同时执行
- 实现多个手势同时执行
- Android 多个animation同时执行
- 同时加载执行多个js函数addLoadEvent()
- secureCRT-多个终端上同时执行同个命令
- 多线程异步编程(2):创建多个线程执行任务,同时更新进度条,使用观察者模式,利用事件通知界面更新。移除对Form的引用,彻底解除界面与逻辑的耦合
- Coded UI Test 同时执行多个测试用例不必每次都关闭浏览器
- ubuntu server下同时执行多个任务 万能的screen
- Ajax 同一页面同时执行多个 XMLHTTP
- Ajax 同一页面同时执行多个 XMLHTTP
- android开发艺术探索(一)
- Android Studio中新建和引用assets文件
- synchronized和lock的实现原理
- NOI2.2基本算法之递归和自调用函数 全排列 分析----如何写全排列函数
- APP加急审核
- RxAnroid之UI控件(View、Widget)RxBinding(同时异步执行多个Observable、同时异步执行多个任务)
- iOS开发趋势:Native与H5+JS 解决方案
- The node /hbase-unsecure is not in ZooKeeper.
- 过河问题_纪中2558_递推
- BZOJ 2669 局部极小值 CQOI2012
- css+jquery步骤进度条
- CodeForces 471B MUH and Important Things
- C++ const 修饰类的用法
- Lucene学习总结之三:Lucene的索引文件格式(3)