java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

今天在开发的时候遇到了一个IllegalStateException, 如下所示:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1842)
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1860)
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:650)
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:609)
    at cn.collabtech.teacher.home.HomeActivity.replaceFragment(HomeActivity.java:158)
    at cn.collabtech.teacher.home.HomeActivity.switchToClassRoomView(HomeActivity.java:445)
    at cn.collabtech.teacher.home.HomeActivity$HomeReceiver.onReceive(HomeActivity.java:516)
    at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
    at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
    at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

看到onSaveInstanceState后一想,这个错误确实是发生在把activity隐藏后,activity收到通知在“后台”做replace fragment的操作所导致的。网上查了一下,有两种解决方案:

方案1: 在activity里面加入一个状态表示,比如DISPLAY_FRAGMENT, 然后在恢复显示activity的时候根据状态去显示相应的fragment,

@Override
protected void onResume(){
    super.onResume();
    if (state == DISPLAY_FRAGMENT) {
        // do something: display fragment
    } else {
        // balabala...
    }

方案2: 用FragmentTransaction.commitAllowingStateLoss() 代替FragmentTransaction.commit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值