微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – java.lang.IllegalStateException(在onSaveInstanceState之后无法执行此操作)

我在不同场景中收到以下消息时出现此错误

>活动已被破坏
>在onSaveInstanceState之后无法执行此操作

我正在编写一个应用程序,其中两个活动互相交互. Activity-A使用Intent启动Activity-B.这个Activity-B类有两个片段子级. Fragment-A使用公共活动方法来启动另一个Fragment-B.

public void beginTransaction(ID id, Bundle bundle) {

        Fragment fragment = getFragmentItem(id);

        // In case this activity was started with special instructions from an Intent,
        // pass the Intent's extras to the fragment as arguments
        fragment.setArguments(bundle);

        // Add the fragment to the 'fragment_container' FrameLayout
        fragmentManager.beginTransaction()
        .add(R.id.fragment_container, fragment).commitAllowingStateLoss();
    }

Fragment-B每次调用finish()来杀死Activity-B,因此控制再次返回Activity-A.同样的过程重复.做了2-3次我得到了:

java.lang.IllegalStateException: Can not perform this action after
onSaveInstanceState E/AndroidRuntime( 9008):
at
android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354)
E/AndroidRuntime( 9008): at
android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)

所以为了避免它,我遵循https://stackoverflow.com/a/10261438/2624806,它开始给我

java.lang.IllegalStateException: Activity has been destroyed
E/AndroidRuntime( 9235): at
android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)
E/AndroidRuntime( 9235): at
android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)

任何建议我在这里缺少什么.

GOT IT我得到了解决方案..在添加片段的事务中发生了错误.我使用.add代替使用.replace(因为我的要求不维护堆栈)并使用commitAllowTransaction来提交它.我也阅读了http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html,看起来我所做的可能是昂贵的,但对于正常的片段交易,提到解决方法很好.

解决方法:

由于声誉较低,我无法对您的问题发表评论.
 我认为这是改变片段的公共方法.

public void beginTransaction(ID id, Bundle bundle)

每次将片段添加到活动时,在此方法中.因此,如果您是第一次添加片段,这将正常工作,但如果是第二个片段,您应该使用替换不添加

    fragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment).commitAllowingStateLoss();

我认为这样做之后你不应该面对这个问题.或者您可以对第一个和第二个片段使用“替换”.
我希望这能帮到您.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐