如何将MutableLiveData< String>转换为MutableLiveData< Int>。
val text = NonNullMutableLiveData<String>("")我的班级NonNullMutableLiveData
class NonNullMutableLiveData<T>(private val defaultValue: T) :
MutableLiveData<T>() {
override fun getValue(): T {
return super.getValue() ?: defaultValue
}
}我想添加另一个MutableLiveData<Int>,在其中我转换了MutableLiveData<String>的值
谢谢
发布于 2019-07-12 03:10:37
您应该使用Transformations.map获得一个intLiveData。
val intLiveData = Transformations.map(textLiveData) {
try {
it.toInt()
} catch (e: NumberFormatException) {
0
}
}然后intLiveData.value可能仍然是空的,即使textLivaData.value已经是"2“。因为intLiveData不会改变,直到intLiveData被观察和激活。
这意味着您应该为intLiveData设置一个观察者,并等待观察者启动。
intLiveData.observe(lifecycleOwner, Observer{ intValue ->
// get the int value.
})正如谷歌所说,
您可以使用转换方法在观察者的生命周期中传递信息。除非观察者正在监视返回的LiveData对象,否则不会计算转换。由于转换是延迟计算的,因此与生命周期相关的行为是隐式传递的,而不需要额外的显式调用或依赖项。
发布于 2019-07-10 11:45:09
https://stackoverflow.com/questions/56969834
复制相似问题