Подождите, пока два наблюдаемых испускают истину

У меня есть Fragment контейнера, который содержит два Fragments на ViewPager . Я хочу подождать, пока эти два Fragments будут готовы для получения некоторых данных. Я создал класс ViewPagerFragment который содержит этот BehaviorSubject:

 val viewReady : BehaviorSubject<Boolean> = BehaviorSubject.createDefault(false) @CallSuper override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewReady.onNext(true) } 

Я подписываюсь на это из своего Fragment контейнера:

 var tab1ready = tab1fragment.viewReady() var tab2ready = tab2fragment.viewReady() 

Я хочу объединить эти два слова следующим образом:

«Когда оба из них fetchData() true, тогда вызывается метод fetchData() »,

Я изо всех сил пытаюсь найти правильный способ сделать это, не вращаясь, сохраняя логическое значение для каждого и проверяя каждую эмиссию, если оба логических значения истинны.

Насколько я понимаю, вы ищете оператора zip() .

http://reactivex.io/documentation/operators/zip.html

merge() может работать и на вас. join() – это чувствительная к времени альтернатива.

https://github.com/ReactiveX/RxJava/wiki/Combining-Observables

Решение №1: .filter (), каждый из которых наблюдается на «истина», .zip () , то есть .take (1) .

Решение №2: Observable.combineLatest () , .filter (), оба из которых являются «истинными», .take (1) .