替换片段时,OnPause()和onResume()顺序



我有2个使用此代码过渡的片段:

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

当我在两个片段之间过渡时,我需要在两者之间进行一些清洁。我将此清理代码放在片段的OnPause((方法中。现在的问题是,第二片的onresume((发生在第一个片段的Onpause((之前

我在每个片段的onpaume((,onresume((和onstop((中放置了一个打印语句,这是片段的,这是它吐出的顺序。

FRAGMENT 2 RESUMED
FRAGMENT 1 PAUSED
FRAGMENT 1 STOPPED

是否有一种方法可以协调这两个片段,以便我可以在每个过渡之间清理?

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

Google引入了优化,默认情况下,在最新版本的支持libs中打开了优化。

来自文档:

优化的副作用是片段可能会从预期顺序中变化。例如,一项交易添加片段a,第二个添加片段b,然后第三个删除片段A。如果没有优化,片段b可以期望在创建它时,片段a也将存在,因为片段a将在片段b之后删除。加入。通过优化,片段B无法期望片段被创建后存在,因为片段A的添加/删除将被优化。

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

最新更新