MVP アーキテクチャを使用し、View 側で RxJava と RxBinding を使用して Android アプリに画面を実装しようとしています。
基本的に、2 つのスピナー、1 つの TextEdit、およびデフォルトで無効になっているボタンがあります。スピナーでアイテムが選択されていて、テキスト フィールドが空でない場合にボタンを有効にしたい。コードは次のとおりです。
Observable.combineLatest(
RxAdapterView.itemSelections(mFirstSpinner),
RxAdapterView.itemSelections(mSecondSpinner),
RxTextView.textChanges(mEditText),
new Func3<Integer, Integer, CharSequence, Boolean>() {
@Override
public Boolean call(Integer first, Integer second, CharSequence value) {
return !TextUtils.isEmpty(value);
}
}).subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean enable) {
mButton.setEnabled(enable);
}
});
問題は、それを MVP パターンに統合する方法です。理想的には、ボタンを有効にする「ビジネス ロジック」はプレゼンターにある必要があります。これを達成するための最良の方法は何ですか?元のオブザーバーを何らかの方法でプレゼンターに渡すことを考えています (副次的な質問はどのように?)。プレゼンターはそれらのオブザーバーを組み合わせて、ボタンを有効にするロジックを持ちます。最後に、View を呼び出してボタンの状態を変更するだけです。
より良いオプションはありますか?View 側に RxJava を使用した MVP の良い例はありますか?