RxAnroid之UI控件(View、Widget)RxBinding(同时异步执行多个Observable、同时异步执行多个任务)

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

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值