我使用以下代码转换了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用户所依赖的逻辑。