gpt4 book ai didi

转换映射中的 Android LiveData 为空

转载 作者:行者123 更新时间:2023-12-04 08:34:11 25 4
gpt4 key购买 nike

我正面临 Android LiveData 和转换 map 的问题。我将解释这个案例:
我有一个 SingleLiveEvent 和 LiveData 如下(一个用于所有项目,另一个用于显示在屏幕上的项目):

val documents: SingleLiveEvent<List<DocumentData>> = SingleLiveEvent()

val itemsToDisplay: LiveData<List<DocumentData>>
get() {
return Transformations.map(documents) { documents ->
return@map documents.filter { showOptionals || it.isMandatory }
}
}

在 Fragment 中,观察 itemsToDisplay 后,如果我想获得 itemsToDisplay 的值LiveData ( itemsToDisplay.value ) 始终为空
itemsToDisplay.observe(this, Observer {
// Inside this method I need to get a calculated property from VM which uses
```itemsToDisplay.value``` and I would like to reuse across the app
loadData(it)
})

// View Model
val hasDocWithSign: Boolean
get() {
return **itemsToDisplay.value**?.any { it.isSignable } ?: false
}

如果 LiveData 使用 Transformation.map 计算,有谁知道它是否不包含该值或者它可能是一个潜在的错误?

最佳答案

当您调用 itemsToDisplay您会得到一个新的空 LiveData 实例,因为您将其声明为没有支持字段的 getter。

val itemsToDisplay: LiveData<List<DocumentData>>
= Transformations.map(documents) { documents ->
documents.filter { showOptionals || it.isMandatory }
}
https://kotlinlang.org/docs/reference/properties.html#backing-fields

关于转换映射中的 Android LiveData 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878282/

25 4 0