Как наблюдать за булевым полем с помощью RxJava - PullRequest
0 голосов
/ 25 июня 2019

В моем классе Foo У меня есть поле boolen.Когда поле изменится, я отреагирую на это изменение в моем классе Bar Как я могу реализовать это с RxJava в Android?

1 Ответ

1 голос
/ 25 июня 2019

Полагаю, вам нужно создать класс Foo с предметом внутри

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

Затем вы должны наблюдать за этим предметом внутри Boo class

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.booleanField, boo.booleanField также изменится.Если вам нужно, вы можете запустить startObserve в конструкторе, чтобы запустить его сразу после создания экземпляра.Может быть, вам нужно создать BehaviorSubject где-то еще и просто перейти на оба класса, используя DI.И не забудьте отписаться после окончания работы.

...