首页 > 解决方案 > android,observer 同时有两个不同的可变实时数据

问题描述

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

标签: androidandroid-livedataconcept

解决方案


您可以使用MediatorLiveData将两个实时数据源合并为一个。这是一个快速示例,它将来自两个单独视图模型的 livedata1 和 livedata2 组合成一个 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
}

推荐阅读