使用 rxjava 进行片段间通信

Inter fragment communication using rxjava

我有一个 activity 片段。在那个片段里面有一个 viewpager,里面有一个列表。现在,一旦用户单击列表中的某个项目,该片段就应替换为另一个片段,我需要传递一些数据,例如列表位置和与之相关的其他一些值。我可以通过使用接口来实现它,但是因为我们使用的是 rxjava,所以想使用 rx 来实现……现在不想实现事件总线或 rxbus 模式。那么如何使用 rxjava 实现它呢?

一种方法:

/* inside whatever you mean by the list */
PublishSubject<Void> mClickSubject = PublishSubject.create(); //or use another type instead of Void if you need

/*...*/
    item.setOnClickListener(v -> mClickSubject.onNext(null));
/*...*/

public Observable<Void> itemClicked() {
    return mClickSubject;
}

/* pass your subject/observable all the way to the activity */

/* inside the activity */

private void setupSubscription() {
    mCurrentFragment.listItemClicked()
            .subscibe(/* switch fragment */);
}

或者另一种方法是让一个单例/静态 class 持有一个成员 PublishSubject 并通过它推送项目。这样做你不需要所有的 getters 将 observable 从列表传递到 activity.