android - Android MVVM,你能用另一个 LiveData 对象观察 ViewModel 中的 LiveData 吗?
问题描述
在我的应用程序中,我使用了这个 ViewModel:
class MainViewModel : ViewModel(){
val hasMessages = MutableLiveData<Boolean>()
val messages = MutableLiveData<List<Message>>()
}
我已经连接了代码,因此如果用户确实有消息,则将填充列表并更新布尔值,这似乎是多余的
它们是两个不同的变量,因为当 hasMessages 设置为 true 时,用户可以在他们的工具栏上看到一个按钮,当他们按下它时,他们会转到显示消息的片段,以便他们可以看到它们
有没有办法设置 hasMessages 使其成为从消息列表派生的 LiveData?
在这种情况下,像 RxJava 的 AsyncSubject 这样的东西可以工作,但我不知道如何让它工作
解决方案
您可以使用 Transformations.map()
val messages = MutableLiveData<List<Message>>()
val hasMessages: LiveData<Boolean> = Transformations.map(messages) {
it.isNotEmpty()
}
推荐阅读
- spi - 连接 AXI Quad SPI 和 AXI4 数据流 FIFO
- python - 如何在 __init__.py 中导入代码
- python-3.x - 从同一类的方法调用时我不想调用装饰器函数
- python - 保存 Keras 模型并将其重用于迁移学习
- javascript - 不推荐使用 event.keyCode,使用 .key 返回 null
- reactjs - 是否可以将带有 React 和 MobX 的简单应用程序放在一个 html 页面中?
- python - 将带有逗号和负值的数字字符串转换为浮点数 [Pandas]
- normalization - 规范化英国的地址
- node.js - ng6-file-man express 上传问题,上传后会生成一个新的未定义文件
- saml-2.0 - 如何从浏览器进行非交互式用户登录以实现 IDP 和 SP 之间的 SAML SSO 流