簡體   English   中英

在設置觀察塊內的變量值后獲取 null 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM