在集成微信支付的时候 跳转微信支付界面之前的界面 我是在Fragment中写的 但是跳转微信支付成功之后,在Fragment中进行弹窗 点击确定返回执行getFragmentManager().popBackStack();返回上一页时 却报了下图异常
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2055)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2078)
at android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:790)
先说解决办法 :
fragmentTransaction.commit(); 改为fragmentTransaction.commitAllowingStateLoss();就可以啦
集成支付宝也是在这个界面 但是却没有闪退 为什么跳转到微信 在回来 却不能调用getFragmentManager().popBackStack() 方法了呢
仔细观察一下 在跳转微信支付之前 界面好像顿了一下 上面的状态栏也变成了微信的状态栏颜色了 但是界面还是本app的界面
debug一下 发现执行了这个方法 onSaveInstanceState 如下图
查看源码 现在popBackStack方法中
会执行enqueueAction(OpGenerator action, boolean allowStateLoss) 方法 且allowStateLoss值为false
再点击进去会执行checkStateLoss();方法
到这里 你应该大概明白了 为什么会抛异常了吧
调用微信支付时 保存了 状态 因此mStateSaved 的值为true
支付成功之后返回Fragment页面 当调用 popBackStack值执行 enqueueAction(new PopBackStackState(null, -1, 0), false);
因此会执行checkStateLoss方法 抛出java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState异常
好了 到此结束 以上个人理解 如有出入 欢迎留言 共同学习共同进步,遇到问题不可怕 可怕的是丢掉了寻找问题根源的勇气