android,观察者一次两个不同的可变实时数据

时间:2020-09-27 03:17:07

标签: android android-livedata concept

我想一次观察两个不同的可变实时数据。有什么办法可以在android中实现吗? 这两个数据也位于不同的ViewModel中。

1 个答案:

答案 0 :(得分:2)

您可以使用MediatorLiveData将两个实时数据源合并为一个。这是一个简单的示例,将来自两个单独的视图模型的livedata1和livedata2组合到MediatorLiveData中,该MediatorLiveData发出一个数据类,其中包含livedata1和livedata2的结果。只要livedata1或livedata2发生更改,调解器都会被触发

data class CombinedResult(val firstData: DataType1, val secondData: DataType2)

private fun createLiveDataMediator() : LiveData<CombinedResult> {

    val result = MediatorLiveData<CombinedResult>()

    val firstLiveData = myViewModel.getLiveData1()
    val secondLiveData = mySecondViewModel.getLiveData2()

    result.addSource(firstLiveData) {
        result.value = CombinedResult(firstLiveData.value, secondLiveData.value)
    }
    result.addSource(secondLiveData) {
        result.value = CombinedResult(firstLiveData.value, secondLiveData.value)
    }

    return result
}