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