私はカスタムボタンを作成しました。内部にチェックされたリスナーがあり、PublishSubjectの助けを借りてオブザーバブルとして公開します。第UIでCompineLatest、マルチプルチェックのボタンを見るRxjava
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を使用して、私が達成しようとすると、保存設定を有効にすることであるbutttonかのボタンのいずれかその状態を変えた。
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()
を使用して初期値を与えようとしましたが、動作しません。特定のボタンを起動して動作するように常に待機します。私はどこに問題があるのか分からない。ここで