天天看點

解決Fragment IllegalStateException: Can not perform this action after onSaveInstanceState

在使用Fragment的FragmentTransaction commit 時候經常會碰到下面的錯誤:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
	at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)
	at android.support.v4.app.FragmentManagerImpl.enqueueAction(Unknown Source)
	at android.support.v4.app.BackStackRecord.commitInternal(Unknown Source)
	at android.support.v4.app.BackStackRecord.commit(Unknown Source)
	at com.yulore.yellowpage.DialLogActivity.a(Unknown Source)
	at com.yulore.yellowpage.fragment.x.handleMessage(Unknown Source)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at android.app.ActivityThread.main(ActivityThread.java:4797)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:511)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
	at dalvik.system.NativeStart.main(Native Method)
           

檢視Developer文檔 commit 方法說明

解決Fragment IllegalStateException: Can not perform this action after onSaveInstanceState

解決辦法

把commit()方法替換成 commitAllowingStateLoss() 

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
		if (this.isFinishing()) {	//判斷Activity是否還存在
			return;
		}
		ft.commitAllowingStateLoss();
//		ft.commit();