gpt4 book ai didi

android - 实时数据 : Remove observer from inside Observer lambda

转载 作者:行者123 更新时间:2023-12-02 12:01:09 26 4
gpt4 key购买 nike

在我的 fragment 中,我观察到一个实时数据:

 viewModel.emailValid.observe(
this,
Observer<GenericResponse> {
dismissProgressBar()
if (it != null && it.success) {
findNavController().navigate(R.id.action_navigatesomewhere)
}
}
)

现在在调用navigate() 之前,我想从viewModel.emailValid 中删除观察者,并且我看到了需要观察者作为参数的可用removeObserver 方法。可以以某种方式引用观察者 lambda 中的观察者吗?

最佳答案

首先,既然你没有调用 observeForever() , 但只需调用 observe()为了从具有生命周期的对象中观察 livedata,您可能不需要删除观察者——当订阅者停止 Activity 时,系统会自动忽略/删除它。

但是,如果您出于某种原因确实需要手动删除观察者,则必须将观察者保存到属性中。这样,您稍后可以将观察者作为参数传递给方法 removeObserver() :

// Define your observer as a property
private val emailValidObserver = Observer<GenericResponse> { onEmailValidChanged(it) }

...

private fun onEmailValidChanged(emailValidResponse: GenericResponse) {
dismissProgressBar()
if (emailValidResponse != null && emailValidResponse.success) {
findNavController().navigate(R.id.action_navigatesomewhere)
}
}

...

// Observe the livedata with the observer you have defined
viewModel.emailValid.observe(this, emailValidObserver)

...

// Stop observing the livedata
shoppingListName.removeObserver(emailValidObserver)

另一方面,如果在某个时候你想删除与你的生命周期实例相关的所有观察者,你可以调用这个方法:
removeObservers(this)

关于android - 实时数据 : Remove observer from inside Observer lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58447637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com