首页 > 解决方案 > 如何将大量 LiveData 组合在一起并转换为单个实体?

问题描述

我正在寻找一种方法来组合我的 Dao 中的一些 LiveData 函数并将它们转换为一个实体。我想创建这样的东西:

private val combinedValues(ld1, ld2, ld3, ld4){
   first, second, third, fourth -> CombinedLiveDataValues(first, second, third, fourth)
}

val combinedEntity: LiveData<Any> = Transformations.map(combinedValues){ it->
   val something = it.first.map (etc...)
}

如何创建一种不重复代码和泛化并添加数十个 liveDatas 的方式?

标签: kotlinandroid-lifecycleandroid-livedata

解决方案


你可以使用这样的东西

fun<T> combine(context: AppCompatActivity, vararg input: LiveData<T>): LiveData<T> {
    val output = MutableLiveData<T>()
    input.forEach {
        it.observe(context, androidx.lifecycle.Observer { value -> 
            output.value = value
        })
    }
    return output
}

推荐阅读