最近用fragment報以下問題
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1332)
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1350)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597)
at android.app.BackStackRecord.commit(BackStackRecord.java:575)
at android.app.DialogFragment.show(DialogFragment.java:230)
是在使用FragmentTransition的 commit方法添加一個Fragment的時候出現的,後來在官網找到了相關的
/**
* Like {@link #commit} but allows the commit to be executed after an
* activity's state is saved. This is dangerous because the commit can
* be lost if the activity needs to later be restored from its state, so
* this should only be used for cases where it is okay for the UI state
* to change unexpectedly on the user.
*/
public abstract int commitAllowingStateLoss();
大致意思是說我使用的 commit方法是在Activity的onSaveInstanceState()之後調用的,這樣會出錯,因爲onSaveInstanceState
方法是在該Activity即將被銷燬前調用,來保存Activity數據的,如果在保存玩狀態後再給它添加Fragment就會出錯。解決辦法就
是把commit()方法替換成 commitAllowingStateLoss()就行了,其效果是一樣的。