我有一个看似简单的用例,在屏幕上我显示基于排序的数据和pageIndex,两者都通过UI进行更改。所以解决方案很容易
Observable
.combineLatest(sortObservable, pageIndexObservable, Pair::of)
.switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))
但是,当排序更改时,pageIndex应重置为0.
如果我这样做
Observable
.combineLatest(
sortObservable.doOnNext(__ -> pageIndexObservable.onNext(0),
pageIndexObservable, Pair::of)
.switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))
然后它发出(最后一个排序,0)然后立即(新排序,0),id显然只想得到它(新排序,0),或者以某种方式忽略它(最后排序,0) ,即有条件地阻止pageIndexObservable发光。
我不想使用withLatestFrom,因为我希望pageIndexObservable发出以触发getData
由于
答案 0 :(得分:0)
您可以使用BehaviorSubject<Pair>
和两个更新规则:
BehaviorSubject<Pair> query = BehaviorSubject.createDefault(Pair.of(0, 0));
query
.switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))
.subscribe(/* ... */);
// ---------------------------------------
void changeSorting(int sort) {
Pair current = query.getValue();
query.onNext(Pair.of(sort, 0));
}
void nextPage() {
Pair current = query.getValue();
query.onNext(Pair.of(current.sort, current.pageIndex + 1));
}