Android。ViewModel "computed observable"

问题描述 投票:0回答:1

你能在Android中拥有计算过的观测值吗(就像你可以在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
1个回答
0
投票

如果需要将多个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
© www.soinside.com 2019 - 2024. All rights reserved.