【发布时间】:2021-09-29 09:56:15
【问题描述】:
我需要观察 Modelview 中的 livedata 更改以更新片段(将列表添加到 recyclerview)。
实现工作正常,但在片段之间切换时遇到问题。
如果当用户切换到 Fragment B 然后返回到 Fragment A 时执行在 Fragment A 上,则启动第二个 livedata 观察器。 (recyclerview 中的数据被重复)等等……
我对 Fragment 生命周期以及在 Fragment 之间移动(在 Fragment Detach/Destroy 上)或在 OnActivityCreated 中创建新观察者之前移除观察者的需要进行了一些研究。但其中任何一个都有效。
我正在观察实时数据:mViewModel.getDetails().observe(getViewLifecycleOwner(), mObserver);
并尝试将观察者删除为:mViewModel.getDetails().removeObservers(getViewLifecycleOwner()) 或 mViewModel.getDetails().removeObservers(this) 或 mViewModel.getDetails().removeObserver(mObserver) 尝试在 OnViewCreated 和 onDestroyView 和 onDestory 和 onDetach 中尝试
这是什么原因造成的,为什么删除观察者不起作用?
仅供参考:
这是我在MainActivity 中使用的功能,用于在导航菜单单击时在片段之间切换
private boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
return true;
}
return false;
}
【问题讨论】:
-
请提供更多细节。分享您的 viewModel 和两个片段。我认为这与您加载新片段的方式无关。
-
可能是什么问题?因为在切换 Fragment 之前功能是正确的,所以它不是独立于其他 Fragment 和 ViewModel 吗?
标签: java android android-fragments android-mvvm