我有一个容器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是否两个布尔都是真的。
答案 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)