RxBinding的使用案例

62 阅读1分钟

文章目录

点击事件防止抖动:

  /**  
	* 点击防止抖动:
    * @Author:yangtianfu
    * @Date:{2018/12/14 20:01}
    * @Description  控件防抖动,windowDuration时间内只允许点击一次
	* 可以用多次初始化点击事件的方式,设置不同条件下控件的防抖动时间
     * 讨论区开启时,1s内只能点击一次,讨论区关闭时,5s内只能点击一次
    */
RxView.clicks(bar_btn_text_live)
                .throttleFirst(windowDuration,TimeUnit.SECONDS)
                .subscribe(new Consumer<Object>() {

                    @Override
                    public void accept(Object o) throws Exception {
                        if (SPUtils.ReadInt(LiveActivity.this, "message", "message") == 100) {
                            PreLiveToast.getINSTANCE().initSinglePreLiveToast(LiveActivity.this,"管理员关闭了讨论区");
                        }else {
                            if (fl_emotionview_main.getVisibility()==View.GONE){
                                fl_emotionview_main.setVisibility(View.VISIBLE);
                            }
                            inputMsgDialog();
                        }
                    }
                });
  

表单验证(账号密码同时验证)

 Observable.combineLatest(RxTextView.textChanges(editName).map(new Function<CharSequence, String>() {
            @Override
            public String apply(CharSequence charSequence) throws Exception {
                return String.valueOf(charSequence.toString());
            }
        }), RxTextView.textChanges(editPwd).map(new Function<CharSequence, String>() {
            @Override
            public String apply(CharSequence charSequence) throws Exception {
                return String.valueOf(charSequence);
            }
        }), new BiFunction<String, String, Boolean>() {
            @Override
            public Boolean apply(String s, String s2) {
                return isNameValid(s)&&isPwdValid(s2);
            }
        }).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                if (aBoolean){
                    btn1.setEnabled(true);
                    RxView.clicks(btn1).subscribe(new Consumer<Object>() {
                        @Override
                        public void accept(Object o) {
                            showToast("Login Success");
                        }
                    });
                }else {
                    showToast("Login Fail");
                }
            }
        });

倒计时获取验证码

 verifyCodeObservable=RxView.clicks(btnGetCode)
                .throttleFirst(SECOND,TimeUnit.SECONDS)//20内只允许点击一次,防止抖动
                .subscribeOn(AndroidSchedulers.mainThread())
                .doOnNext(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) {
                        try {
                            RxView.enabled(btnLogin).accept(false);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
        verifyCodeObservable.subscribe(new Consumer() {
            @Override
            public void accept(Object o) throws Exception {
                Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
                        .take(20)//设置上限20次
                        .subscribe(new Observer<Long>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Long value) {
                                try {
                                    RxTextView.text(btnGetCode).accept("剩余 "+(SECOND-value)+"秒" );
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }


                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {
                                try {
                                    RxTextView.text(btnGetCode).accept("再次获取验证码");
                                    RxView.enabled(btnLogin).accept(true);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }


                            }
                        });

            }
        });

    }

    private Toast mToast;

    protected void showToast(String desc) {
        if (mToast == null) {
            mToast = Toast.makeText(this.getApplicationContext(), desc, Toast.LENGTH_SHORT);
        } else {
            mToast.setText(desc);
        }
        mToast.show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        verifyCodeObservable.unsubscribeOn(AndroidSchedulers.mainThread());//防止泄露
    }
}