IllegalStateException:恢复应用程序时已添加片段

时间:2014-08-01 17:07:04

标签: java android android-fragments back-stack

概述: 我有一个基于片段的应用程序,只有一个活动。在发布时,我添加了我的主片段,一切运行良好。当我点击某些东西时,我调用replace()来换出新的片段并将事务添加到后栈。

问题: 当应用程序在后台死亡时(或最容易复制并且“不要让活动保持活动状态”),并且我从主屏幕重新启动应用程序,我会在下面得到例外情况。 / p>

情境: 1.打开应用程序 2.导航到辅助片段(如果您从未离开主片段,则不会出现此问题) 3.应用背景 4.让应用程序自然死亡(约24小时),或启用“不要激活活动”。在开发人员选项中 5.从主屏幕打开应用程序

预期: 应用程序打开主片段(无论背景时显示什么片段)

实际: 崩溃

其他要求: - 背景应用程序,并立即从主屏幕点击必须返回到以前的片段(假设它没有在后台销毁)。

堆栈跟踪(请注意我的应用程序本身没有来电,所以我无处调试):

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rcg.socialstitch/com.rcg.socialstitch.ViewStitchActivity}: java.lang.IllegalStateException: Fragment already added: ViewStitchFragment{42800520 #1 id=0x7f040030}
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2227)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2276)
       at android.app.ActivityThread.access$800(ActivityThread.java:144)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5146)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.IllegalStateException: Fragment already added: ViewStitchFragment{42800520 #1 id=0x7f040030}
       at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1133)
       at android.app.BackStackRecord.run(BackStackRecord.java:618)
       at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
       at android.app.Activity.performStart(Activity.java:5320)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2190)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2276)
       at android.app.ActivityThread.access$800(ActivityThread.java:144)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5146)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
       at dalvik.system.NativeStart.main(NativeStart.java)

1 个答案:

答案 0 :(得分:1)

我相信我已经解决了这个问题。我的.replace()调用所有添加到后台堆栈,但我的初始.add()没有。当我确保我的初始片段添加不是后栈时,这似乎不再发生。