刷新片段回到上一个片段

Refresh fragment on back to previous fragment

这就是我应用程序中的内容

一切都按预期正常工作,但有一件事我不明白为什么会这样。

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

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

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

我不能在其他片段上执行此操作,当我返回列表片段时发现数据已更新吗?

请记住,它像我希望的那样工作,但在某些时候我真的不知道它不再存在了!

搜索后,问题是我从包含 ROOM 数据库 DAO 的存储库创建实例,所以所有 LIVEDATA 数据库连接已删除

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

你可以通过多种方式做到这一点,我推荐你使用Dependences Injection 我使用的工具是 HILT DAGGER here here

在 class 中创建一个函数,其中的片段定义如下。

 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();