У меня есть следующая ViewModel с MutableLiveData data
и другой LiveData ones
, которая получена из data
таким образом, что она обновляет свое значение, только если data.number
равно 1.
class DummyViewModel : ViewModel() {
private val data = MutableLiveData<Dummy>()
val ones = data.mapNotNull { it.takeIf { it.number == 1 } }
init {
data.value = Dummy(1, "Init")
doSomething()
}
fun doSomething() {
data.value = Dummy(2, "Do something")
}
}
data class Dummy(val number: Int, val text: String)
fun <T, Y> LiveData<T>.mapNotNull(mapper: (T) -> Y?): LiveData<Y> {
val mediator = MediatorLiveData<Y>()
mediator.addSource(this) { item ->
val mapped = mapper(item)
if (mapped != null) {
mediator.value = mapped
}
}
return mediator
}
Я наблюдаю ones
в моем фрагменте. Однако, если я выполню doSomething
, я не получу никаких обновлений в моем фрагменте. Если я не выполню doSomething
, фиктивная Init
правильно присутствует в ones
, и я получу обновление.
Что здесь происходит? Почему ones
пусто и как я могу решить эту проблему?