美文网首页
RxJava实际应用--->联合判断

RxJava实际应用--->联合判断

作者: 谢尔顿 | 来源:发表于2018-07-03 17:57 被阅读5次

1.需求场景

需要同时对多个事件进行联合判断,如,填写表单时,需要表单里所有信息(姓名,年龄,职业等)都被填写后,才允许点击“提交”按钮。

2.具体实现

采用操作符combineLatest实现上述功能。

    @BindView(R.id.name)
    EditText name;
    @BindView(R.id.age)
    EditText age;
    @BindView(R.id.job)
    EditText job;
    @BindView(R.id.submit)
    Button submit;

    @SuppressLint("CheckResult")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_joint_judgment);
        ButterKnife.bind(this);

        final Observable<CharSequence> nameObservable = RxTextView.textChanges(name).skip(1);
        Observable<CharSequence> ageObservable = RxTextView.textChanges(age).skip(1);
        Observable<CharSequence> jobObservable = RxTextView.textChanges(job).skip(1);

        Observable.combineLatest(nameObservable, ageObservable, jobObservable, new Function3<CharSequence, CharSequence, CharSequence, Boolean>() {
            @Override
            public Boolean apply(CharSequence charSequence, CharSequence charSequence2, CharSequence charSequence3) throws Exception {
                boolean isUserNameValid = !TextUtils.isEmpty(name.getText());
                boolean isUserAgeValid = !TextUtils.isEmpty(age.getText());
                boolean isUserJobValid = !TextUtils.isEmpty(job.getText());
                return isUserNameValid && isUserAgeValid && isUserJobValid;
            }
        }).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean b) throws Exception {
                Log.d(Constant.TAG, "提交按钮是否可点击:" + b);
                submit.setEnabled(b);
            }
        });

    }

3.测试结果

07-03 17:57:03.175 19903-19903/? D/RxJava: 提交按钮是否可点击:true

参考文章:

相关文章

网友评论

      本文标题:RxJava实际应用--->联合判断

      本文链接:https://www.haomeiwen.com/subject/yiaduftx.html