【发布时间】:2014-10-20 12:41:58
【问题描述】:
我有两个片段,每个片段都有发布主题,在 onResume() 中初始化调用 onNext(true)。我想将这两个主题结合起来,并在它们都返回 true 时调用第三类中的某个方法。我需要为此使用 Observable 吗?我找不到合适的操作,zip 不起作用,因为这些是主题。我该如何结合这些?
【问题讨论】:
标签: android android-fragments rx-java
我有两个片段,每个片段都有发布主题,在 onResume() 中初始化调用 onNext(true)。我想将这两个主题结合起来,并在它们都返回 true 时调用第三类中的某个方法。我需要为此使用 Observable 吗?我找不到合适的操作,zip 不起作用,因为这些是主题。我该如何结合这些?
【问题讨论】:
标签: android android-fragments rx-java
主题既是观察者又是可观察者。因此您可以使用 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)
}
}
【讨论】: