返回到上一个碎片并刷新该碎片。

4

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

  • 一个包含2个带有ViewModels和Databinding的Fragment的Activity。
  • 使用LiveData的Room Database以持续更新UI。
  • 使用Navigation Controller在Fragments之间导航。
  • Fragment #1具有RecyclerView(Custom Object列表)。
  • Fragment #2用于插入或更新操作(Transactions)。

一切都像预期的那样工作得很好,但我有一件事情无法弄清楚为什么会发生。

当我跳转到Fragment #2执行Room Database的插入或更新操作,然后通过(顶部或底部)返回按钮回到Fragment #1时,Fragment #1不会重新加载,数据也不会更改(更新),直到我重新加载数据。

而如果我在同一Fragment中进行插入或更新操作,则列表将立即更改。

我必须在同一Fragment中进行插入和更新操作吗?

我不能在其他Fragment中执行此操作,在返回列表Fragment时发现数据已经更新了吗?

请记住,它之前像我所希望的那样工作,但某些时候我真的不知道为什么不再工作了!!

2个回答

1
在搜索之后,我发现这个问题是因为我从包含 ROOM 数据库 DAO 的存储库中创建了实例,所以所有与数据库的 LIVEDATA 连接都被删除了。
解决方法是使用单例模式,即在包含我的片段的活动的整个生命周期中仅使用一个存储库实例和一个 room 数据库实例。
您可以通过多种方式实现这一点,我建议您使用依赖注入。我使用的工具是HILT DAGGER here here

0
在类中创建一个函数,其中片段的定义如下。
 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();
        }
    }

现在在第2个片段中调用它,当您想在任何操作后调用第1个片段时。

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

1
我不想刷新我的片段,我以为每次从其他片段返回时它都会刷新,但问题就是我在下面的答案中提到的。 - Adham Gamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接