【问题标题】:Refresh fragment on back to previous fragment刷新片段回到上一个片段
【发布时间】:2020-04-07 00:30:01
【问题描述】:

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

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

一切都按预期进行,但有一件事我不知道为什么会发生。

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

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

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

我不能在其他片段上这样做,当我返回列表片段时,我发现数据已更新?

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

【问题讨论】:

    标签: android android-fragments uinavigationcontroller android-room android-livedata


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我不想刷新我的片段,我认为每次从其他片段返回时它都会刷新,但问题是我在下面的回答中提到的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多