如何在Java中刷新Android片段v1.3.0

2022-02-27 00:00:00 release refresh android java fragment

从新的片段版本1.3.0开始,在其内部刷新片段似乎不能像在版本1.2.5中那样工作。

适用于我的项目的1.2.5版代码:

FragmentTransaction ft = getFragmentManager().beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
   ft.setReorderingAllowed(false);
}
ft.detach(this).attach(this).commit();

但在v1.3.0中使用此选项无法刷新片段。

有没有人有解决这个问题的办法?我在发行说明中找不到详细说明可能出现问题的任何更改的文档。谢谢!


解决方案

根据this issue:

这与Fragment 1.3.0-beta01 release notes中提到的新状态管理器的预期工作方式一样,是修复在添加输入片段视图(aosp/1427376)之前没有一致删除现有片段视图的问题的要求,这实际上修复了许多可能导致崩溃的边缘情况。

您可以更改代码,将此重新创建为两个单独的事务:

fun Fragment.recreateView() {
    parentFragmentManager
        .beginTransaction()
        .detach(this)
        .commitNow()
    parentFragmentManager
        .beginTransaction()
        .attach(this)
        .commitNow()
}

它接着说:

您可能希望启动b/173472486跟踪Lint警告以提供与此模式完全相同的快速修复,并启动b/165840276将第一类API添加到片段以重新创建其视图,而无需detach()/attach()

相关文章