关于rxjava联合判断

近两年大火的rxjava有无数大神研究,其中就有一篇是rxjava联合判断。但是我认为rxjava联合判断毫无用处。首先,贴出代码。

name = (EditText) findViewById(R.id.name);
age = (EditText) findViewById(R.id.age);
job = (EditText) findViewById(R.id.job);
list = (Button) findViewById(R.id.list);

/*
 * 步骤2:为每个EditText设置被观察者,用于发送监听事件
 * 说明:
 * 1. 此处采用了RxBinding,需要引入依赖:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
 * 2. 传入EditText控件,点击任1EditText撰写时,都会发送数据事件 = Function3()的返回值(下面会详细说明)
 * 3. 采用skip(1)原因:跳过 一开始EditText无任何输入时的空值
 **/
Observable<CharSequence> nameObservable = RxTextView.textChanges(name).skip(1);
Observable<CharSequence> ageObservable = RxTextView.textChanges(age).skip(1);
Observable<CharSequence> jobObservable = RxTextView.textChanges(job).skip(1);

/*
 * 步骤3:通过combineLatest()合并事件 & 联合判断
 **/
Observable.combineLatest(nameObservable,ageObservable,jobObservable,new Function3<CharSequence, CharSequence, CharSequence,Boolean>() {
    @Override
    public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception {

        /*
         * 步骤4:规定表单信息输入不能为空
         **/
        // 1. 姓名信息
        boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) ;
        // 除了设置为空,也可设置长度限制
        // boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) && (name.getText().toString().length() > 2 && name.getText().toString().length() < 9);

        // 2. 年龄信息
        boolean isUserAgeValid = !TextUtils.isEmpty(age.getText());
        // 3. 职业信息
        boolean isUserJobValid = !TextUtils.isEmpty(job.getText()) ;

        /*
         * 步骤5:返回信息 = 联合判断,即3个信息同时已填写,"提交按钮"才可点击
         **/
        return isUserNameValid && isUserAgeValid && isUserJobValid;
    }

}).subscribe(new Consumer<Boolean>() {
    @Override
    public void accept(Boolean s) throws Exception {
        /*
         * 步骤6:返回结果 & 设置按钮可点击样式
         **/
        Log.e(TAG, "提交按钮是否可点击: "+s);
        list.setEnabled(s);
    }
});
在这里,大家要关注的是
Function3这里接口。里面传的是
CharSequence, CharSequence, CharSequence,Boolean四个参数。这就意味着我们有且只有对三个edittext做出判断,因为第一和下面的
public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception
严格对应。第二,打开rxjava的apply函数,用static方法定义了四个参数,,其中层层嵌套。建议高级以
下Android不要使用,尽量使用if,else判断。可能是我比较菜,就写到这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值