2017-04-19 59 views
2

當我有2個片段,我過渡使用此代碼:的onPause()和的onResume()命令替換片段

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()這是它吐出來的順序。

FRAGMENT 2 RESUMED 
FRAGMENT 1 PAUSED 
FRAGMENT 1 STOPPED 

有沒有辦法來協調這兩個片段,這樣我可以在每個過渡之間清理?

+1

在提交之前執行['transaction.setAllowOptimization(false)'](https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean))。 – azizbekian

+0

你是救命的人。請把這個作爲答案,以便我可以指定它。 – FireDragonMule

回答

1

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

Google引入了優化,這些優化默認情況下在最新版本的支持庫中打開。

docs來自:

優化的副作用是,片段可具有狀態改變超出了預期的量級。例如,一個事務添加片段A,第二個添加片段B,然後第三個刪除片段A.如果沒有進行優化,片段B可以預期在創建片段時,片段A也將存在,因爲片段A將在片段B之後被移除加入。通過優化,片段B不能期望片段A在創建時存在,因爲片段A的添加/刪除將被優化。

這些優化有時會破壞我們作爲該API的用戶所依賴的邏輯。