在典型的Android ViewModel中,我们可以使用轻松创建可恢复的LiveData
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
?(例如,在恢复时,它将首先检索以前的发射值,而不是重新初始化(
注意:我可以按以下方式做,只是看起来很生气。
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()
}
}