gio*_*ozh 7 android kotlin android-livedata android-viewmodel
在我的片段中,我观察到一个实时数据:
viewModel.emailValid.observe(
this,
Observer<GenericResponse> {
dismissProgressBar()
if (it != null && it.success) {
findNavController().navigate(R.id.action_navigatesomewhere)
}
}
)
Run Code Online (Sandbox Code Playgroud)
现在在调用navigate()之前,我想从viewModel.emailValid 中删除观察者,并且我已经看到需要观察者作为参数的可用removeObserver方法。可以以某种方式引用观察者 lambda 中的观察者吗?
首先,由于您不是在调用observeForever(),而只是observe()为了从具有生命周期的对象中观察实时数据而调用,因此您可能不需要删除观察者——它会被系统自动忽略/删除,当订阅者停止活动。
但是,如果您出于某种原因确实需要手动删除观察者,则必须将观察者保存到属性中。这样,您以后就可以将观察者作为参数传递给方法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)
Run Code Online (Sandbox Code Playgroud)
另一方面,如果在某个时候您想删除与您的生命周期实例关联的所有观察者,您可以调用此方法:
removeObservers(this)
Run Code Online (Sandbox Code Playgroud)
您可以为其使用匿名对象:
viewModel.emailValid.observe(
this,
object : Observer<GenericResponse> {
override fun onChanged(it: GenericResponse?) {
viewModel.emailValid.removeObserver(this)
dismissProgressBar()
if (it != null && it.success) {
findNavController().navigate(R.id.action_navigatesomewhere)
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6050 次 |
| 最近记录: |