[英]Getting null value after setting the value of a variable inside observe block
在我的用户界面中 - MainActivity.kt
我有:
private var recommendationCount: Int? = null
onCreate{
viewmodel.recommended.observe(this){
recommendationCount = it.size
}
//I need to set the view outside the observe
binding.myTextView.text = recommendationCount.toString()
//it returns null
}
当我在观察块之外设置我的 textview 时,它返回一个 null 值。 但是当我在里面设置它时,它会返回正确的值。
我需要把它放在外面。
您不能仅仅因为 onCreate() 会在 viewModel 更改您在 onCreate() 中观察到的 Observable(我猜是实时数据)的值之前执行其中的所有代码作为解决方案,所以您不能将其设置在观察者之外作为解决方案,您可以给出您的变量是一个默认值,当 viewModel 更改 Observable 的值时,它将在观察者块中更改(我猜是实时数据)
由于要合并来自多个 LiveData 的值,因此需要将它们组合成一个 LiveData。 您不能只按顺序从每个数据中获取数据,因为 LiveData 并非旨在同步工作(您可以使用value
属性,但这并不可靠,因为可以在设置初始值之前检查该值)。
您需要通过合并将它们组合成一个 LiveData 或 Flow。 它可以通过使用 MediatorLiveData 的 LiveData 完成,但使用 Flows 更容易,因为您可以使用combine
function。 你可以做这样的事情,将流转换回 LiveData 以避免使用协程:
val combinedLiveData = combine(
liveDataA.asFlow(),
liveDataB.asFlow(),
liveDataC.asFlow()
) { a, b, c ->
a + b + c
}.asLiveData()
但如果您使用协程,则无需转换回 LiveData。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.