[英]Android remove Activity observer from Fragment
我有 MVVM 单个活动应用程序,任务每 x 分钟运行一次。
在Activity
我正在观察该任务的结果。 一切正常。
导航到某个Fragment
我想停止在Activity
观察它,导航到另一个Fragment
后再次观察它(在 Activity 中)。
在Activity中观察的代码
settingsViewModel.pb.observe(this, Observer {
pb.visible(it)
})
希望我把问题说清楚了
你需要做的就是
override fun onDestroyView() {
super.onDestroyView()
viewModel.request.removeObservers(this)
}
你为什么不改变观察者,而是观察 Activity,如果该片段可见,只需从 Activity 更新它。 就像是:
settingsViewModel.pb.observe(this, Observer {
if (currentFrag is yourFragment) {
// currentFrag.doSomething()
} else {
pb.visible(it)
}
})
编辑1:
查看导航片段的 primaryNavigationFragment 属性,您可以在那里获得对它的引用:
val navHost = supportFragmentManager.findFragmentById(R.id.main_nav_fragment)
navHost?.let { navFragment ->
navFragment.childFragmentManager.primaryNavigationFragment?.let {currentFrag->
// currentFrag.doSomething()
}
}
}
您可以删除活动生命周期的所有观察者
settingsViewModel.pb.removeObservers(mActivity)
它将删除该实时数据的所有观察者。当再次移动到另一个片段时,您可以像正在做的那样设置新的观察者
settingsViewModel.pb.observe(this, Observer {
pb.visible(it)
})
首先使用SharedViewModel
在您的所有片段中拥有您的视图模型,并在您需要的每个片段中观察您的实时数据。 然后在观察到livedata
时调用您的活动方法。
fragment1 {
sharedViewModel.pb.observe(viewLifecycleOwner, Observer {
activityCallBack.someMethod()
})
}
fragment2 {
sharedViewModel.pb.observe(viewLifecycleOwner, Observer {
activityCallBack.someMethod()
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.