刷新片段回到上一个片段
Refresh fragment on back to previous fragment
这就是我应用程序中的内容
- Activity 有 2 个带有 ViewModel 和数据绑定的片段。
- 带有实时数据的房间数据库将持续更新UI。
- 用于在片段之间导航的导航控制器。
- 片段 #1 有 RecyclerView(自定义对象列表)。
- 片段 #2 用于插入或更新操作(事务)。
一切都按预期正常工作,但有一件事我不明白为什么会这样。
当我转到片段 #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();
这就是我应用程序中的内容
- Activity 有 2 个带有 ViewModel 和数据绑定的片段。
- 带有实时数据的房间数据库将持续更新UI。
- 用于在片段之间导航的导航控制器。
- 片段 #1 有 RecyclerView(自定义对象列表)。
- 片段 #2 用于插入或更新操作(事务)。
一切都按预期正常工作,但有一件事我不明白为什么会这样。
当我转到片段 #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();