我使用此代码转换了2个片段:
private void switchTo(Fragment frag) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.contentPanel, frag);
transaction.commit();
}
当我在2个碎片之间转换时,我需要在两者之间进行一些清理。我把这个清理代码放在片段的onPause()方法中。现在的问题是第二个片段的onResume()发生在第一个片段的onPause()之前
我在每个片段的两个片段的onPause(),onResume()和onStop()中放置了一个print语句,这就是它将它吐出的顺序。
FRAGMENT 2 RESUMED
FRAGMENT 1 PAUSED
FRAGMENT 1 STOPPED
有没有办法协调这两个片段,以便我可以在每次过渡之间进行清理?
答案 0 :(得分:1)
在提交之前执行transaction.setAllowOptimization(false)
。
Google引入了优化,默认情况下在最新版本的支持库中启用了优化。
来自docs:
优化的副作用是片段的状态更改可能超出预期的顺序。例如,一个事务添加片段A,第二个事件添加片段B,然后第三个事件添加片段A.没有优化,片段B可以预期在创建片段时,片段A也将存在,因为片段A将在片段B之后被删除加入。通过优化,片段B不能指望片段A在创建时存在,因为片段A的添加/删除将被优化。
这些优化有时会破坏我们作为该API用户所依赖的逻辑。