我使用以下代码转换了2个片段:

 private void switchTo(Fragment frag) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.replace(R.id.contentPanel, frag);
    transaction.commit();
}


当我在两个片段之间转换时,我需要在这两个片段之间进行一些清理。我将此清理代码放入片段的onPause()方法中。现在的问题是第二个片段的onResume()发生在第一个片段的onPause()之前

我在两个片段的每个片段的onPause(),onResume()和onStop()上放置了一条打印语句,这是将其吐出的顺序。

FRAGMENT 2 RESUMED
FRAGMENT 1 PAUSED
FRAGMENT 1 STOPPED


有没有办法协调这两个片段,以便我可以在每个过渡之间进行清理?

最佳答案

在提交前执行transaction.setAllowOptimization(false)

Google引入了优化功能,默认情况下,最新版本的支持库处于启用状态。

docs


  优化的副作用是片段的状态更改可能超出预期的顺序。例如,一个事务添加了片段A,第二个事务添加了片段B,然后第三个事务删除了片段A。如果不进行优化,片段B可能期望在创建片段时,片段A也将存在,因为片段A将在片段B之后被删除。加入。通过优化,片段B不能期望片段A在创建时就存在,因为片段A的添加/删除操作将被优化。


这些优化有时会破坏我们作为该API用户所依赖的逻辑。

10-06 01:15