首页 > 解决方案 > Android MVVM,你能用另一个 LiveData 对象观察 ViewModel 中的 LiveData 吗?

问题描述

在我的应用程序中,我使用了这个 ViewModel:

class MainViewModel : ViewModel(){
    val hasMessages = MutableLiveData<Boolean>()
    val messages = MutableLiveData<List<Message>>()

}

我已经连接了代码,因此如果用户确实有消息,则将填充列表并更新布尔值,这似乎是多余的

它们是两个不同的变量,因为当 hasMessages 设置为 true 时,用户可以在他们的工具栏上看到一个按钮,当他们按下它时,他们会转到显示消息的片段,以便他们可以看到它们

有没有办法设置 hasMessages 使其成为从消息列表派生的 LiveData?

在这种情况下,像 RxJava 的 AsyncSubject 这样的东西可以工作,但我不知道如何让它工作

标签: androidsubject

解决方案


您可以使用 Transformations.map()

      val messages = MutableLiveData<List<Message>>()

      val hasMessages: LiveData<Boolean> = Transformations.map(messages) {
         it.isNotEmpty()
      }

推荐阅读