导航组件-Livedata生命周期问题

时间:2019-05-31 19:17:42

标签: android android-livedata

我从导航组件开始,并且在使用livedata观察器时遇到了一些问题。

例如: 我有这个livedata,负责管理服务器的身份验证响应。

viewModel.authenticate.observe(this, Observer {
        manageAuthResponse(it)
        })

一切正常,我去了片段B。 但是,当我进入片段B并尝试返回到片段A(包含该实时数据)时,Observer会再次使用先前的结果(SUCCESS)触发。

如何防止这种情况?

当我返回时,我想刷新此结果并防止激发livedata观察器。

1 个答案:

答案 0 :(得分:2)

将您的LiveData对象包装在ConsumableValue

class ConsumableValue<T>(private val data: T) {

    private var consumed = false

    fun consume(block: ConsumableValue<T>.(T) -> Unit) {
        if (!consumed) {
            consumed = true
            block(data)
        }
    }
}

然后在视图模型中

val authenticate = MutableLiveData<Consumable<AuthenticationObject>>()

以及您的片段中

viewModel.authenticate.observe(this, Observer { consumable ->
        consumable.consume {
            manageAuthResponse(it)
        }
    })