我設定應用程式的方式是,服務將在后臺獲取一些資訊,這些資訊需要由Fragment實時獲取,然后將其顯示到視圖中。為此,我將資料放在 ViewModel 中,并讓我的 Fragment 觀察 ViewModel 中的 LiveData。
問題是,我無法從服務中設定/更改 ViewModel 類中的 LiveData。似乎 ViewModel 旨在用于活動和片段之間,我似乎無法在我的服務中獲取 ViewModel 以更改我的片段需要觀察的值。有沒有辦法實作這個?
uj5u.com熱心網友回復:
您可能希望使用具有自己的 MutableLiveData 欄位的存盤庫,該欄位在您的服務中進行了修改。然后,您的 ViewModel 將具有指向 Repository 欄位的 MutableLiveData 欄位,并且您的 Fragment 可以觀察該欄位。
分段:
...
viewModel.myData.observe(viewLifecycleOwner) { myData ->
// handle new data observed
}
...
視圖模型:
// Need to clear repo reference in [onCleared] to avoid resource leaks
private var _myData: MutableLiveData<MyData>? = myRepo.myData
val myData: MutableLiveData<MyData> = _myData
...
override fun onCleared() {
super.onCleared()
_myData = null
}
存盤庫:
val myData = MutableLiveData<MyData>() // or whatever source (Room, etc.)
服務:
...
Repository.getInstance().myData.postValue(/* some new info */)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453733.html
上一篇:如何在單擊按鈕時從一個片段移動到另一個片段?(科特林)
下一篇:理解以下演算法解決方案面臨的問題
