如何使用RxJava观察布尔值字段

时间:2019-06-25 18:16:04

标签: android observable rx-java

在我的课程Foo中,我有一个布尔字段。当字段更改时,我将在我的课程Bar中对此更改做出反应 如何在Android中使用RxJava实现此功能?

1 个答案:

答案 0 :(得分:1)

我想您必须创建类Foo并包含主题

class Foo {
    var booleanField: Boolean = false
    set(value) {
        field = value
        observable.onNext(value)
    }
    val observable = BehaviorSubject.createDefault(booleanField)
}

然后,您必须在Boo类中观察该主题

class Boo(val observable: BehaviorSubject<Boolean>) {
    var booleanField: Boolean = false
    var disposable: Disposable? = null

    fun startObserve() {
        disposable?.dispose()
        disposable = observable.subscribe {
            booleanField = it
        }
    }

    fun finishObserve() {
        disposable?.dispose()
        disposable = null
    }
}

如果必须运行它,只需创建Foo并将其传递给Boo:

val foo = Foo()
val boo = Boo(foo.observable)
boo.startObserve()

foo.booleanField = true //boo is changed to true too

现在,如果您更改foo.booleanFieldboo.booleanField也将更改。 如果需要,可以在构造器中运行startObserve以在实例创建后立即启动它。 可能是您必须在其他地方创建BehaviorSubject并仅使用DI传递给两个类。 而且,别忘了在工作完成后退订。