使用 Rxjava Android 从 Activity 更新片段

Updating fragment from Activity Using Rxjava Android

我有一个简单的用例:

我正在使用 rxandroid,子库 rxlifecycle 组件和 android,但我仍处于学习阶段,Whosebug 上什至没有 rx-lifecycle 标签,所以我还在努力理解这个库的流程..

编辑

我不想用 EventBus ,就像大家喊着大家做某事一样,所以 Rxjava Observable 的方法会很有用

需要考虑的两点:

  1. 仅仅因为你使用了 EventBus 并不意味着它需要 全球的。如果你愿意,你可以有多个事件总线,你可以 在两个组件(Activity 和 Fragment)之间共享一个。

  2. RxJava 文档中有几个示例显示 如何使用 RxJava

  3. 实现事件总线功能

通过使用事件总线,您可以将整个过程与 Android 生命周期分离,从而大大简化事情。

要将信息从片段发布到 activity,您应该使用事件总线通知 activity 片段创建(替换回调和它们创建的混乱)。

使用 RxJava 的事件总线示例代码是:

public class SampleEventsBus {
    private static final String TAG = SampleEventsBus.class.getSimpleName();
    private static final String TAG2 = SampleEventsBus.class.getCanonicalName();

    public static final int ACTION_FRAGMENT_CREATED = 1;
    public static final int ACTION_FRAGMENT_OTHER = 2;

    private static SampleEventsBus mInstance;

    public static SampleEventsBus getInstance() {
        if (mInstance == null) {
            mInstance = new SampleEventsBus();
        }
        return mInstance;
    }

    private SampleEventBus() {}

    private PublishSubject<Integer> fragmentEventSubject = PublishSubject.create();

    public Observable<Integer> getFragmentEventObservable() {
        return fragmentEventSubject;
    }

    public void postFragmentAction(Integer actionId) {
        fragmentEventSubject.onNext(actionId);
    }
}

然后从你的片段中你可以调用:

SampleEventsBus.getInstance().postFragmentAction(SampleEventsBus.ACTION_FRAGMENT_CREATED);

来自 onAttach()onViewCreated() 或您喜欢的任何地方。

此外,在 activity 中,您需要将以下代码放入您的事件总线:

SampleEventsBus .getInstance().getFragmentEventObservable().subscribe(new Subscriber<Integer>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Integer actionId) {
            if(actionId == SampleEventsBus.ACTION_FRAGMENT_CREATED) {
                //do any required action
            }
        }
    });

对于第二部分,即从 activity 更新片段,我不建议使用这种方法,因为它会导致不必要的复杂性,而是使用 "original way" 作为:

  1. 在 Fragment 中创建方法 updateView(Object obj)
  2. onNext()中,得到想要的片段为SampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");
  3. 致电fragment.updateView(obj);

希望对您有所帮助。