片段初始化RxJava / RxAndroid时如何观察?

时间:2014-10-20 12:41:58

标签: android android-fragments rx-java

我有两个片段,每个片段都有发布主题,在onResume()初始化时调用onNext(true)。我想结合这两个主题,并在它们都返回true时调用第三类中的某些方法。我需要使用Observable吗?我找不到合适的操作,zip不起作用,因为这些是主题。我该如何结合这些?

1 个答案:

答案 0 :(得分:5)

主题既是Observer又是Observable。所以你可以使用zip操作符,即使是主题。

您可以做的是将zipfilter运算符一起使用。

    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)
     }


 }