Вы должны использовать 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.
})
Как Google говорит,
Вы можете использовать методы преобразования для переноса информации через жизненный цикл наблюдателя. Преобразования не рассчитываются, если только наблюдатель не наблюдает за возвращенным объектом LiveData. Поскольку преобразования рассчитываются лениво, поведение, связанное с жизненным циклом, неявно передается без дополнительных явных вызовов или зависимостей.