http://blog.csdn.net/top_code/article/details/12614571
在使用Fragment的FragmentTransaction commit 時候經常會碰到下面的錯誤:
[html] view plain copy
- 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 方法說明
解決辦法
把commit()方法替換成 commitAllowingStateLoss()
[java] view plain copy
- ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
- if (this.isFinishing()) { //判斷Activity是否還存在
- return;
- }
- ft.commitAllowingStateLoss();
- // ft.commit();
20. 在debug帶有android.support.v4的包時,結果出現下面的錯誤:
05-10 15:47:09.850: E/AndroidRuntime(12744): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
比較完整的stack如下:
| |
| |
| |
| |
| |
| |
| |
| |
在此處有人也一個有點類似問題:
http://stackoverflow.com/questions/7575921/illegalstateexception-can-not-perform-this-action-after-onsaveinstancestate-h
我看到上面有提到onSaveInstanceState(),于是就重寫了下這個.像上面說的不能調用super.我調用了,而且居然就tmd沒有錯誤提示了..
19.05-10 16:08:43.190: E/AndroidRuntime(14243): java.lang.IllegalStateException: addToBackStack() called after commit()