【问题标题】:How to set default value in BehaviourSubject如何在 BehaviorSubject 中设置默认值
【发布时间】:2018-08-28 05:17:12
【问题描述】:

可能是一个菜鸟问题。如何为 BehaviourSubject 设置默认值。

我有一个具有 2 个不同值的枚举

enum class WidgetState {
    HIDDEN,
    VISIBLE
}

还有一个发出状态的行为主体

val widgetStateEmitter: BehaviorSubject<WidgetState> = BehaviorSubject.create()

在编写视图逻辑时,我的发射器开始发射。但是默认情况下它是隐藏的。如何将默认值设置为 WidgetState.HIDDEN 到我的发射器widgetStateEmitter

【问题讨论】:

  • BehaviorSubject 有一个不错的文档,其中包括:“此主题没有设计为公共构造函数;可以通过 create() 方法和 创建此 BehaviorSubject 的新空实例可以通过 createDefault(Object) 创建一个新的非空实例(这样命名是为了避免与创建 Observable 而不是 BehaviorSubject 的 Observable.create 发生重载决议冲突)。"

标签: android kotlin rx-java


【解决方案1】:

有一个静态的BehaviorSubject.createDefault(T defaultValue) 工厂方法允许设置初始值。

defaultValue 参数的 Javadoc 说:

defaultValue - 将首先发射到任何Observer 的项目 只要BehaviorSubject 还没有观察到任何来自 其来源Observable

所以您只需按如下方式创建您的BehaviorSubject

val widgetStateEmitter: BehaviorSubject<WidgetState> = 
        BehaviorSubject.createDefault(HIDDEN)

【讨论】:

    【解决方案2】:

    订阅此主题时,您可以使用Start with Operator

    widgetStateEmitter.startWith(HIDDEN)
    //continue your chain
    

    【讨论】:

    • 但是其他订阅者不会得到默认值
    • 是的,@MidasLefko。那是正确的。每个订阅者都需要这个运营商。
    【解决方案3】:

    在您的构造函数或 onCreate(或类似)中只需调用 widgetStateEmitter.onNext(HIDDEN)

    【讨论】:

      猜你喜欢
      • 2023-01-09
      • 2010-11-14
      • 2021-09-22
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多