我从市场上的应用程序获取用户报告,但出现以下异常:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) 
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) 
at android.app.Activity.onBackPressed(Activity.java:2066) 
at android.app.Activity.onKeyUp(Activity.java:2044) 
at android.view.KeyEvent.dispatch(KeyEvent.java:2529) 
at android.app.Activity.dispatchKeyEvent(Activity.java:2274) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) 
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) 
at android.app.Activity.dispatchKeyEvent(Activity.java:2269) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) 
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) 
at android.app.Activity.dispatchKeyEvent(Activity.java:2269) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) 
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2880) 
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2853) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:2028) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4028) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:491) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
at dalvik.system.NativeStart.main(Native Method) 

显然它与 FragmentManager 有关,我不使用它。堆栈跟踪没有显示我自己的任何类,因此我不知道此异常发生在哪里以及如何防止它。

郑重声明:我有一个选项卡主机,每个选项卡中都有一个 ActivityGroup 在“Activity ”之间切换。

请您参考如下方法:

请查看我的回答here 。基本上我只需要:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    //No call for super(). Bug on API Level > 11. 
} 

不要在 saveInstanceState 方法上调用 super()。这把事情搞砸了......

这是已知的bug在支持包中。

如果您需要保存实例并向您的 outState Bundle 添加某些内容,您可以使用以下命令:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE"); 
    super.onSaveInstanceState(outState); 
} 

最后,正确的解决方案是(如评论中所示)使用:

transaction.commitAllowingStateLoss(); 

添加或执行导致异常FragmentTransaction时。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!