【问题标题】:Using ViewModel to get Live Data in Android Fragment使用 ViewModel 获取 Android Fragment 中的实时数据
【发布时间】: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) 尝试在 OnViewCreatedonDestroyViewonDestoryonDetach 中尝试

这是什么原因造成的,为什么删除观察者不起作用?

仅供参考:

这是我在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


【解决方案1】:

尝试将值设置为null之后

mViewModel.getDetails().removeObservers(getViewLifecycleOwner()).
mViewModel.getDetails().setValue(null)

【讨论】:

  • 这会将模型视图中的值设置为空。错误答案
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多