java - 如何同时重新加载所有片段
问题描述
我有一个包含 2 个片段的活动。我们将活动称为“MainActivity”,第一个片段“FragmentA”和第二个片段“FragmentB”。当我在 FragmentA 中删除一个元素时,我在 FragmentA 中使用这个方法来重新分配它:
public void reload_fragment() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commit();
}
但我还需要同时重新加载 FragmentB。我尝试在上述方法中添加:
public void reload_fragment() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commit();
MainActivity mainActivity = new MainActivity();
mainActivity.reload_fragments();
然后,在我的 mainActivity 中,我有这个方法:
public void reload_fragments(){
viewPager = findViewById(R.id.Viewpager_ID);
adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
但它不起作用。我尝试将 FragmentA 内部的相同方法添加到 FragmentB,然后由 FragmentA 调用它,但它再次显示“NullObjectReference 上的虚拟方法”。如何同时刷新所有片段?
解决方案
形成一个带有 MutableLiveData 布尔字段的 ViewModel,称为“刷新”。向 ViewModel 添加一个名为“toggleRefresh()”的方法,该方法会翻转刷新状态。在每个片段中,在 onAttatch 中,观察刷新字段并“在那里重新加载”?
推荐阅读
- java - 如何使表格根据列的总宽度调整其大小?
- python - 如何将我自己的函数放在 if 语句中?
- spring - Spring Boot 中禁止 OPTIONS 请求
- asp.net-mvc - MVC 中的按钮提交未按预期工作
- python - 如何修复 ValueError:期望属性名称:第 4 行第 1 列(字符 43)
- javascript - vue-good-table 行上是否有右键单击事件来显示上下文菜单?
- go - 将返回的错误分配给下划线
- asp.net-core - .NET core 中区域的使用
- c - 为什么我的代码块在 main() 中起作用,但在它自己的函数中不起作用?
- laravel - 我正在使用 laravel 5.6 日志,我正在尝试存储用户登录数据