首页 > 解决方案 > 如何订阅在代码的其他部分发出的 Observable?

问题描述

我是 RxJava 的初学者。我有以下问题。我有一个Presenter和一个Fragment。我正在onCreate片段内创建演示者。我想订阅ObservablePresenter 的构造函数中的一个。这个 Observable 应该在 FragmentonViewCreated触发时发出(它调用 Presenter 中的某些方法 - 即onViewReady)。我遇到的问题是,当我创建 Observable(在 Presenter 的构造函数中)时,我还必须传递发射器。如何在构造函数中订阅 observable 并稍后在内部发出onViewReady

我尝试搜索一堆 StackOverflow 和 Medium 链接。在 Observable 创建期间,它们似乎总是通过发射器。

分段

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    // create presenter
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    // call presenter.onViewReady
}

主持人

Presenter() {
    // create and subscribe to observable
}

public void onViewReady() {
    // emit observable
}

标签: androidobservablerx-java

解决方案


您是否考虑过使用主题?

片段代码:

public Subject<Integer> subject = PublishSubject.create()

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    presenter = new Presenter(subject);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    subject.onNext(1);
}

演示者代码:

Presenter(Subject<Integer> subject) {
    subject.doOnNext(i -> onViewReay()).subscribe();
}

public void onViewReady() {
    // code here...
}

我希望语法很好,因为我在没有 android studio 的情况下这样做了。还。我建议使用一次性设备来确保您在片段销毁时处理订阅。

我只在 RxJava2 中尝试过。因此,如果您使用的是 RxJava1,可能需要进行一些额外的调整。


推荐阅读