1

我有 5 个复选框,并使用 RxBinding 检查所有复选框的状态。

预期的逻辑(变量名以'cb'开头是复选框,以'btn'开头是按钮)

  1. 如果选中/取消选中 cbAgreeAll,则 cbOption1~cbOp​​tion4 设置与 cbAgreeAll 相同的状态。
  2. 如果 cbOption1~cbOp​​tion4 全部选中,则 cbAgreeAll 也设置为选中。
  3. 如果一个或多个复选框未选中,则 cbAgreeAll 也设置为未选中。
  4. 如果勾选了cbOption1、cbOption2,则btnNext Button setEnabled(true)

第一个和第二个逻辑像我预期的那样工作,但是当所有复选框都被选中时,我取消选中 cbOption1~cbOp​​tion4 之一,然后所有复选框都被取消选中。和 4 也没有工作。

我的代码如下所示,

Disposable cbAgreeallDisposable = RxCompoundButton.checkedChanges(binding.cbAgreeall).subscribe(check -> {
        isAllAgree = check;
        binding.cbOption1.setChecked(check);
        binding.cbOption2.setChecked(check);
        binding.cbOption3.setChecked(check);
        binding.cbOption4.setChecked(check);
    });
    Observable<Boolean> cbOption1 = RxCompoundButton.checkedChanges(binding.cbOption1);
    Observable<Boolean> cbOption2 = RxCompoundButton.checkedChanges(binding.cbOption2);
    Observable<Boolean> cbOption3 = RxCompoundButton.checkedChanges(binding.cbOption3);
    Observable<Boolean> cbOption4 = RxCompoundButton.checkedChanges(binding.cbOption4);


    compositeDisposable.add(cbAgreeallDisposable);
    compositeDisposable.add(cbOption1.subscribe(check -> isOption1Agree = check));
    compositeDisposable.add(cbOption2.subscribe(check -> isOption2Agree = check));
    compositeDisposable.add(cbOption3.subscribe(check -> isOption3Agree = check));
    compositeDisposable.add(cbOption4.subscribe(check -> isOption4Agree = check));

    compositeDisposable.add(Observable
            .combineLatest(cbOption1, cbOption2,
                    (cb1, cb2) -> cb1 && cb2)
            .subscribe(isValid -> binding.btnNext.setEnabled(isValid))
    );

    compositeDisposable.add(Observable
            .combineLatest(cbOption1, cbOption2, cbOption3, cbOption4,
                    (cb1, cb2, cb3, cb4) -> cb1 && cb2 && cb3 && cb4)
            .subscribe(isValid -> binding.cbAgreeall.setChecked(isValid)
    ));
4

0 回答 0