Fragment IllegalStateException: Can not perform this action after onSaveInstanceState

来源:互联网 发布:机锋网推荐的淘宝 编辑:程序博客网 时间:2024/05/20 21:41

http://blog.csdn.net/top_code/article/details/12614571


在使用Fragment的FragmentTransaction commit 时候经常会碰到下面的错误:

[html] view plaincopy
  1. java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState  
  2.     at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)  
  3.     at android.support.v4.app.FragmentManagerImpl.enqueueAction(Unknown Source)  
  4.     at android.support.v4.app.BackStackRecord.commitInternal(Unknown Source)  
  5.     at android.support.v4.app.BackStackRecord.commit(Unknown Source)  
  6.     at com.yulore.yellowpage.DialLogActivity.a(Unknown Source)  
  7.     at com.yulore.yellowpage.fragment.x.handleMessage(Unknown Source)  
  8.     at android.os.Handler.dispatchMessage(Handler.java:99)  
  9.     at android.os.Looper.loop(Looper.java:137)  
  10.     at android.app.ActivityThread.main(ActivityThread.java:4797)  
  11.     at java.lang.reflect.Method.invokeNative(Native Method)  
  12.     at java.lang.reflect.Method.invoke(Method.java:511)  
  13.     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)  
  14.     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)  
  15.     at dalvik.system.NativeStart.main(Native Method)  


查看Developer文档 commit 方法说明



解决办法

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


[java] view plaincopy
  1. ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);  
  2.         if (this.isFinishing()) {   //判断Activity是否还存在  
  3.             return;  
  4.         }  
  5.         ft.commitAllowingStateLoss();  
  6. //      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如下:

105-10 15:47:06.470: W/dalvikvm(12744): threadid=1: thread exiting with uncaught exception (group=0x40a4b1f8)
205-10 15:47:09.850: E/AndroidRuntime(12744): FATAL EXCEPTION: main
305-10 15:47:09.850: E/AndroidRuntime(12744): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
405-10 15:47:09.850: E/AndroidRuntime(12744):    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
505-10 15:47:09.850: E/AndroidRuntime(12744):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
605-10 15:47:09.850: E/AndroidRuntime(12744):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
705-10 15:47:09.850: E/AndroidRuntime(12744):    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
805-10 15:47:09.850: E/AndroidRuntime(12744):    at android.support.v4.app.DialogFragment.show(DialogFragment.java:123)
在此处有人也一个有点类似问题:

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()


0 0
原创粉丝点击