等到两个observable发出true

时间:2017-12-14 10:33:54

标签: android kotlin rx-java rx-java2

我有一个容器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)
}

我从我的Container Fragment订阅了这个:

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

我想以下列方式将这两者结合起来:

“当其中两个发出true时,则调用方法fetchData()

我正在努力寻找正确的方法来实现这一目标,不会为每个人保留一个布尔值并检查每个emision是否两个布尔都是真的。

2 个答案:

答案 0 :(得分:0)

根据我的理解,您正在寻找zip()运营商。

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

merge()也可能适合你。 join()是时间敏感的替代方案。

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

答案 1 :(得分:0)

解决方案#1: .filter()每个可观察到'true', .zip()两者, .take(1)

解决方案#2: Observable.combineLatest() .filter()两者都是'true', .take(1)