android - 如何订阅在代码的其他部分发出的 Observable?
问题描述
我是 RxJava 的初学者。我有以下问题。我有一个Presenter
和一个Fragment
。我正在onCreate
片段内创建演示者。我想订阅Observable
Presenter 的构造函数中的一个。这个 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
}
解决方案
您是否考虑过使用主题?
片段代码:
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,可能需要进行一些额外的调整。
推荐阅读
- php - 将 php 变量传递到 Twig - 文档抛出错误
- python - 这个 Ruby 代码在 Python 中的等价物是什么?
- python - 过滤包含元组的列表列表
- javascript - 如何在查找 Javascript 文件时解决命令提示符中的 SQL ECONNREFUSED 错误?
- c - 多子部分加法的流程API
- r - 如何在ggplot方面按值排序数据
- node.js - 不一致 - “用于调用 Google Play Developer API 的项目 ID 尚未在 Google Play Developer Console 中链接。”
- symfony - empty_data 不适用于复合形式,或者实体没有被实例化(ArgumentCountError:函数的参数太少)
- reactjs - react: setstate 的可重用事件处理程序
- javascript - Vue DOM 更新不会在第一次点击中发生,在后续点击中有效