【问题标题】:CompineLatest that observe multipe checked buttons RxjavaCompineLatest 观察多重检查按钮 Rxjava
【发布时间】:2017-12-25 07:16:21
【问题描述】:

我创建了自定义按钮,它具有内部检查的侦听器,并且我在 PublishSubject 的帮助下将其公开为可观察对象。

public class SwitchItem extends LinearLayout implements SwitchButton.OnCheckedChangeListener {
    //other fields ...
    private PublishSubject<Boolean> checkedObservable = PublishSubject.create();

//I call this method in each
private void initViews(String itemTitle, String itemStatus, boolean isChecked) {
        //other initializations 
        if (switchButton != null) {
            switchButton.setOnCheckedChangeListener(this);
        }

    }

    @Override
    public void onCheckedChanged(SwitchButton view, boolean isChecked) {
        defaultItemStatusText(isChecked);
        checkedObservable.onNext(isChecked);
    }

    //to get the observable
    public Observable<Boolean> getCheckedObservable() {
        return checkedObservable;
    }

}

在用户界面中,我有多个这种类型的按钮,我获取了它们的所有可观察对象并使用 CompineLatest 来监听任何更改,我试图实现的是在任何按钮更改其状态时启用设置保存按钮。

 Observable.combineLatest(button1, button2,button3,(cheked1, cheked2, cheked3) -> {
boolean isSettingsChanged = false;
isSettingsChanged = checked1 != inital1 || checked2 != inital2 || checked3 != inital3;
return isSettingsChanged;
  }).subscribe(enable -> getView().enableSave(enable));

我必须更改所有按钮状态的问题,所以compineLatest 开始触发其逻辑。我尝试使用setChecked() 给它们一个初始值,但它不起作用,它总是等待触发特定按钮以便它开始工作。我不知道问题出在哪里。

【问题讨论】:

    标签: android rx-java2 oncheckedchanged combinelatest


    【解决方案1】:

    这是我解决问题的方法:

    Observable.merge(button1.distinct(), button2.distinct(), button3.distinct())
       .subscribe(ignore -> getView().enableSave(true));
    

    通过使用.distinct(),您可以确保按钮仅在发生更改时发出。如果您需要在发生变化时发出 并且 匹配某个值,那么您将查看 .distinct().filter(&lt;Predicate&gt;)

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      相关资源
      最近更新 更多