Can not perform this action after onSaveInstanceState

参考:
Fragment的展现与Activity状态丢失 IllegalStateException:Can not perform this action after onSaveInstanceState

解决 IllegalStateException: Can not perform this action after onSaveInstanceState

异常:

java.lang.IllegalStateException

Can not perform this action after onSaveInstanceState
解析原始
1 android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
2 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
3 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634)
4 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613)
5 com.dch.dai.activity.lend.ManualLendDetailOneActivity.initFragment(ManualLendDetailOneActivity.java:78)
6 com.dch.dai.activity.lend.ManualLendDetailOneActivity.access$(ManualLendDetailOneActivity.java:29)
7 com.dch.dai.activity.lend.ManualLendDetailOneActivity$2.onPostExecute(ManualLendDetailOneActivity.java:152)
8 com.dch.dai.utils.http.MyAsyncTask.onPostExecute(MyAsyncTask.java:38)
9 com.dch.dai.utils.http.MyAsyncTask.onPostExecute(MyAsyncTask.java:9)
10 android.os.AsyncTask.finish(AsyncTask.java:660)
11 android.os.AsyncTask.-wrap1(AsyncTask.java)
12 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
13 android.os.Handler.dispatchMessage(Handler.java:102)
14 android.os.Looper.loop(Looper.java:)
15 android.app.ActivityThread.main(ActivityThread.java:6343)
16 java.lang.reflect.Method.invoke(Native Method)
17 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:920)
18 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)

分析:

onSaveInstanceState方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存完状态后
再给它添加Fragment就会出错。

解决办法

1、就是把commit()方法替换成 commitAllowingStateLoss()

getSupportFragmentManager().beginTransaction()
.remove(getSupportFragmentManager().findFragmentById(R.id.fl_main))
.commit();

getSupportFragmentManager().beginTransaction()
.remove(getSupportFragmentManager().findFragmentById(R.id.fl_main))
.commitAllowingStateLoss();

2、判断activity是否已finish,没有则执行

//判断Activity是否Destroy
protected boolean isDestroy(Activity activity) {
    return activity == null || 
      activity.isFinishing() ||
            (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值