[英]How can we combine SavedStateHandler with LiveData Coroutine Builder?
在典型的 Android ViewModel 中,我們可以使用
val liveData = savedStateHandle.getLiveData<String>("SomeKey")
每當設置 liveData 值時,它會自動保存和恢復
但是,如果我們使用liveData
協程構建器(即https://developer.android.com/topic/libraries/architecture/coroutines#livedata )
val liveDataSaved: LiveData<String> = liveData {
emit(someValue)
}
我們如何也加入到savedStateHandle
? (例如恢復時,它會首先檢索之前發出的值,而不是重新初始化)
注意:我可以做如下,只是看起來很hacky。
val liveDataSaved: LiveData<String> = liveData {
val someValue = savedStateHandle.get("Key") ?: getValue()
savedStateHandle.put("Key", someValue)
emit(someValue)
}
您可以使用MediatorLiveData組合多個其他實時數據源,然后在最后觀察這個生成的MediatorLiveData
。
在您的情況下,您可以有多個來源到此MediatorLiveData
,如下所示:
val liveDataValue = MediatorLiveData<String>().apply {
var intermediateValue = ""
fun update() {
this.value = intermediateValue
}
addSource(savedStateHandle.getLiveData<String>("SomeKey")) {
intermediateValue = it
update()
}
addSource(
liveData {
emit(someValue)
}
) {
intermediateValue = it
update()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.