实际上,我自己使用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);
}
}
有一点需要注意。combineLatest() 仅在所有 Observables 在订阅它们后发出第一个项目时才发出项目。这就是为什么我需要在 Mosby 订阅后初始化重试。
@Override
protected void onStart() {
super.onStart();
retrySubject.onNext(true);
}
另请查看Github上 @sockeqwe 的答案