kotlin - 删除/添加实时数据观察者以观察按钮单击时的句柄
问题描述
我想观察房间数据库中的一行。它会在一段时间后改变。但是当我们点击停止按钮时,它需要停止观察表单数据库,当点击开始按钮时,它会再次开始观察。
我当前的代码是创建观察者
private lateinit var recordObserver: Observer<Ride>
recordObserver= Observer<Ride> { rides ->
if (rides != null)
updateData(rides)
else
setDataToZero()
}
when(isState){
Constants.isrunning->{//need to start observer}
Constants.Stop->{//need to stop observer}
}
解决方案
为了开始/停止观察LiveData
,您应该使用observe()
/removeObserver()
方法。就如此容易。如果您可以访问LifecycleOwner
( Fragment
, Activity
),请使用fun observe()
,如果没有,请使用fun observeForever()
。
您的代码将如下所示:
val liveData = database.observeRides() // get your live data
when(isState){
Constants.isrunning -> {
liveData.observe(this, recordObserver)
}
Constants.Stop -> {
liveData.removeObserver(recordObserver)
}
}
推荐阅读
- c# - Gmail SMTP 客户端在 Azure 上失败
- kubernetes - 如何使用不带引号的 k8s Ansible 模块?
- android - React Native 无法在应用程序 webview 中打开 url:intent://photos.app.goo.gl/
- c++ - CMake variable_watch 不显示对变量 PKG_CONFIG_EXECUTABLE 的修改
- node.js - 将 xml 文件导入 test.js 文件
- java - 如何减少使用 ENCODING_PCM_16BIT 和采样率 8000 Hz 录制的音频数据?
- python - 如何在 python 脚本中执行 eksctl 命令?
- javascript - 从对象创建变量
- r - 在字符串中出现多个模式时过滤R中的数据框
- python - Open-sesame UnicodeDecodeError:“charmap”编解码器无法解码位置 2779 中的字节 0x9d:字符映射到