1

在典型的 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?(例如恢复时,它会首先检索之前发出的值,而不是重新初始化)

注意:我可以做如下,只是看起来很hacky。

val liveDataSaved: LiveData<String> = liveData {
    val someValue = savedStateHandle.get("Key") ?: getValue()
    savedStateHandle.put("Key", someValue)
    emit(someValue)
}
4

1 回答 1

0

您可以使用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()
    }
}
于 2022-01-03T12:33:17.750 回答