将上的片段刷新回上一个片段



这就是我的应用中的内容

  • 带有ViewModels和Databinding的2个片段的活动
  • 带有Livedata的房间数据库可持续更新用户界面
  • 导航控制器,用于在片段之间导航
  • 片段#1具有RecyclerView(自定义对象列表(
  • 片段#2用于插入或更新操作(事务(

一切都如预期的那样顺利,但有一件事我不明白为什么会发生。

当我转到片段#2将数据插入或更新到房间数据库,然后用(顶部或底部(后退按钮返回片段#1时,片段#1不会重新加载,数据也不会更改(更新(,直到我重新加载数据。

在其他情况下,当我在同一片段插入或更新数据时,列表会立即更改。

我必须在同一个片段上进行插入和更新操作吗?

我不能在其他片段中这样做吗?当我回到列表片段时,我发现数据已经更新了?

请记住,这是我希望的工作,但在某个时候,我真的不知道它不再是了!!

搜索后,问题是我正在从包含ROOM数据库DAO的存储库中创建实例,因此所有LIVEDATA到数据库的连接都被删除了

解决方案是使用singleton模式,这意味着在包含我的片段的活动的整个生命周期中只使用一个存储库实例和一个房间数据库实例。

你可以用很多方法做到这一点,我建议你使用依赖项注入我使用的工具是HILT DAGGER这里是

在类中创建一个函数,其中片段是这样定义的。

public void refresh( ) {
fragment = new  ListFragment();
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
if (fragment != null) {
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.container, fragment).commit();
}
}

现在在你的第二个片段中调用它,你想在任何动作后调用第一个片段。

((MainActivity) Objects.requireNonNull(getActivity())).refresh();

相关内容

最新更新