android - 如何使用 RxJava 观察布尔字段
问题描述
在我的课堂Foo
上,我有一个布尔字段。当字段发生变化时,我将在我的类中对这种变化做出反应Bar
如何在 Android 中使用 RxJava 实现这一点?
解决方案
我想你必须创建一个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.booleanField
,boo.booleanField
也会改变。如果需要,可以在构造函数中运行 startObserve 以在创建实例后立即启动它。可能您必须在BehaviorSubject
其他地方创建并使用 DI 传递给两个类。并且不要忘记在工作完成后取消订阅。
推荐阅读
- d3.js - 放大缩小d3 js可折叠树
- mongodb - 聚合:嵌套文档中的分组日期(嵌套对象)
- excel - 带有 if/and/or 语句的 For 循环
- java - Spring data - 具有相同标识符的不同对象,即使对象相等
- python - Pygame 'pygame.Surface' 对象不可调用
- node.js - 将 8kHz mulaw 转换为 PCM 16kHz
- python - 为什么当我做子图时窗口正在切割我的桌子?
- python - PYTHON:带有本地文件夹文件调用的导入模块=错误
- javascript - 谷歌地图多个和重叠的复选框
- java - 在 Java 中的每个循环结束时等待?