#observable #rx-java #rx-java2
#наблюдаемый #rx-java #rx-java2
Вопрос:
На самом деле у меня есть что-то вроде этого
Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::trackPage, this::error));
где getSomething1() дает некоторую информацию, необходимую для отслеживания моего фрагмента, и на самом деле это работает довольно хорошо.
Но мне нужно добавить еще один наблюдаемый источник, потому что мне нужно больше информации от другого наблюдаемого. При использовании combineLatest и 3 источников функция trackPage() вызывается дважды..
Существует ли оператор типа «излучать только при третьем наблюдаемом изменении»?или что-то в этом роде, что позволило бы мне отслеживать из 3 источников и создавать новое отслеживание только при изменении видимости.
Спасибо!
Комментарии:
1. Вы пробовали то, что я предложил в своем ответе :)?
Ответ №1:
Я не совсем уверен, правильно ли я понял ваш сценарий, но, возможно, вы можете связать combineLatest
его с новым наблюдаемым использованием zipWith
. The zipWith
будет выдавать значение (применяя любую комбинацию выданных значений, которые вы хотите) только тогда, когда combineLatest
он выдает значение, и третья наблюдаемая тоже выдает значение. (Документация RxJava zip)
Observable.combineLatest(presenter.getSomething1(), fragmentVisibility, Pair::create)
.zipWith(thirdObservable(), (pairEmissionFromCombineLatest, emissionFromThirdObservable) {
// Combine the emissions and emit a new value (Here I am just re-emitting the emitted value of the combineLatest observable
return pairEmissionFromCombineLatest;
})
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::trackPage, this::error));