解決Can not perform this action after onSaveInstanceState問題

最近用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的時候出現的,後來在官網找到了相關的

說明:http://developer.android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss()


  /**
     * 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()就行了,其效果是一樣的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章