実際にはcombineLatest()
を使用して問題を解決しました。 retrySubjectは以前のインテントの内容を知る必要はありません。
class MyViewActivity extends MviActivity<MyView, MyViewState> implements MyView {
PublishSubject<Boolean> retrySubject = ... ; // fires on retry Button click
...
@Override
public Observable<String> searchIntent(){
Observable<String> searchObservable = RxSearchView.queryTextChanges(searchView);
return Observable.combineLatest(searchObservable,retrySubject(searchString, retryClicked) -> searchString);
}
}
注意すべき点が1つあります。 combineLatest()は、すべてのObservableがサブスクライブした後、最初のアイテムを発行したときにのみアイテムを送出します。なぜモスビーが購読をした後に再試行を初期化する必要があるのですか?
@Override
protected void onStart() {
super.onStart();
retrySubject.onNext(true);
}
もGithub
で@sockeqweからの回答をご覧ください