如何将MutableLiveData< String>
转换为MutableLiveData< Int>
。
val text = NonNullMutableLiveData<String>("")
我的类(class)NonNullMutableLiveData:
class NonNullMutableLiveData<T>(private val defaultValue: T) :
MutableLiveData<T>() {
override fun getValue(): T {
return super.getValue() ?: defaultValue
}
}
我想添加另一个
MutableLiveData<Int>
,在其中我已转换MutableLiveData<String>
的值谢谢
最佳答案
您应该使用Transformations.map
来获取intLiveData。
val intLiveData = Transformations.map(textLiveData) {
try {
it.toInt()
} catch (e: NumberFormatException) {
0
}
}
即使
intLiveData.value
已经为“2”,然后textLivaData.value
仍可能为null。因为在观察到并激活intLiveData
之前intLiveData
不会改变。这意味着您应该将观察者设置为
intLiveData
,并等待观察者启动。intLiveData.observe(lifecycleOwner, Observer{ intValue ->
// get the int value.
})
正如google所说,