簡體   English   中英

我們如何將 SavedStateHandler 與 LiveData Coroutine Builder 結合起來?

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

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