我有两个片段,每个片段都有发布主题,在onResume()初始化时调用onNext(true)。我想结合这两个主题,并在它们都返回true时调用第三类中的某些方法。我需要使用Observable吗?我找不到合适的操作,zip不起作用,因为这些是主题。我该如何结合这些?
答案 0 :(得分:5)
主题既是Observer又是Observable。所以你可以使用zip操作符,即使是主题。
您可以做的是将zip
与filter
运算符一起使用。
Subject<Boolean, Boolean> sub1 = PublishSubject.create();
Observable<Boolean> filter1 = sub1.filter((e) -> e); // filter only event is true
Subject<Boolean, Boolean> sub2 = PublishSubject.create();
Observable<Boolean> filter2 = sub2.filter((e) -> e); // filter only event is true
Observable.zip(filter1, filter2, (one, two) -> true).subscribe()
如果您只是想知道每个片段是否已初始化,也许您可以发出片段而不是获得如下合同:如果发出了视图,那么它已准备就绪。
class Fragment1 {
Subject<Fragment, Fragment> sub1 = PublishSubject.create();
public void onResume() {
sub1.onNext(this);
}
}
class Fragment2 {
Subject<Fragment, Fragment> sub1 = PublishSubject.create();
public void onResume() {
sub1.onNext(this);
}
}
class MyView {
public onCreate() {
Observable.zip(sub1, sub2, (one, two) -> true).subscribe((b) -> // dosomething)
}
}