You should use Mediator Live data , should be something like :
fun <T1, T2, T3> combineLiveDatas(
liveData1: LiveData<T1>,
liveData2: LiveData<T2>,
transform: (T1, T2) -> T3
): LiveData<T3> {
return CombineLiveDatas(liveData1, liveData2, transform).result
}
private class CombineLiveDatas<T1, T2, T3>(
liveData1: LiveData<T1>,
liveData2: LiveData<T2>,
private val transform: (T1, T2) -> T3
) {
private var value1: T1? = liveData1.value
private var value2: T2? = liveData2.value
private val mediator = MediatorLiveData<T3>()
val result: LiveData<T3> = mediator
init {
mediator.addSource(liveData1) { value ->
value?.let {
value1= it
notifyDataChanged()
}
}
mediator.addSource(liveData2) { value ->
value?.let {
value2= it
notifyDataChanged()
}
}
notifyDataChanged()
}
private fun notifyDataChanged() {
val v1 = value1?: return
val v2 = value2?: return
mediator.value = transform(v1, v2)
}
}