简体   繁体   English

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

[英]How to observe a boolen field with RxJava

In my class Foo I have a boolen field. 在我的课堂Foo我有一个布尔字段。 When the field changes I will react on this change in my class Bar How can I implement this with RxJava in Android? 当字段更改时,我将对类Bar更改做出反应,如何在Android中使用RxJava实现此操作?

I guess you have to create class Foo with subject inside 我想你必须创建带有主题的Foo

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

Then you have to observe that subject inside Boo class 然后,您必须在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
    }
}

If you have to run it just create Foo and pass it's subject to Boo: 如果必须运行它,只需创建Foo并将其传递给Boo:

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

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

now if you change foo.booleanField , boo.booleanField will change too. 现在,如果您更改foo.booleanFieldboo.booleanField也将更改。 If you need, you can run startObserve in constructor to start it immidiatly after creating instance. 如果需要,可以在构造器中运行startObserve以在实例创建后立即启动它。 May be you have to create BehaviorSubject somewhere else and just pass to both classes using DI. 可能是您必须在其他地方创建BehaviorSubject ,然后使用DI传递给两个类。 And do not forget to unsubscribe after work is done. 并且,别忘了在工作完成后退订。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM