首页 > 解决方案 > Android:ViewModel“计算可观察”

问题描述

你能在 Android 中计算 observables 吗(就像你可以在 VueJS 中一样)?

class MainActivityViewModel() : ViewModel() {
    val speedInput = MutableLiveData<Double>() // Actual value from sensor input.
    val speedFactor = MutableLiveData<Double>() // To be set from shared preferences

    val speed = speedInput * speedFactor // The value we need is computed from two observables.
}

标签: android-viewmodel

解决方案


如果需要将多个 LiveData 合并为一个,则可以使用MediatorLiveData。它可以将多个 LiveData 作为源并根据这些源“计算”自己的值(因此,要获得它的值,您也应该观察它)。

像这样的东西:

.........
val speed = MediatorLiveData<Double>()

speed.addSource(speedInput) { value ->
    speed.value = computeSpeed(speedInput, speedFactor)
}
speed.addSource(speedFactor) { value ->
    speed.value = computeSpeed(speedInput, speedFactor)
}
.........

fun computeSpeed(speedInput: MutableliveData<Double>, speedFactor: MutableliveData<Double>) = speedInput.value * speedFactor.value

推荐阅读