【发布时间】:2014-05-13 12:39:15
【问题描述】:
当我按下 android 的主页按钮并开始新活动时,我遇到了一些奇怪的问题。
我的堆栈跟踪如下
05-13 18:06:21.182: E/FragmentManager(5674): Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:21.182: E/FragmentManager(5674): Activity state:
05-13 18:06:22.032: E/ACRA(5674): ACRA caught a IllegalStateException exception for com.itgurussoftware.android.dineback. Building report.
05-13 18:06:27.732: E/ACRA(5674): com.itgurussoftware.android.dineback fatal error : Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:27.732: E/ACRA(5674): java.lang.IllegalStateException: Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:27.732: E/ACRA(5674): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1723)
05-13 18:06:27.732: E/ACRA(5674): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:546)
05-13 18:06:27.732: E/ACRA(5674): at android.app.Activity.performSaveInstanceState(Activity.java:1113)
05-13 18:06:27.732: E/ACRA(5674): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1185)
05-13 18:06:27.732: E/ACRA(5674): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2793)
05-13 18:06:27.732: E/ACRA(5674): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2851)
05-13 18:06:27.732: E/ACRA(5674): at android.app.ActivityThread.access$900(ActivityThread.java:123)
05-13 18:06:27.732: E/ACRA(5674): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1164)
05-13 18:06:27.732: E/ACRA(5674): at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 18:06:27.732: E/ACRA(5674): at android.os.Looper.loop(Looper.java:137)
05-13 18:06:27.732: E/ACRA(5674): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-13 18:06:27.732: E/ACRA(5674): at java.lang.reflect.Method.invokeNative(Native Method)
05-13 18:06:27.732: E/ACRA(5674): at java.lang.reflect.Method.invoke(Method.java:511)
05-13 18:06:27.732: E/ACRA(5674): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-13 18:06:27.732: E/ACRA(5674): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-13 18:06:27.732: E/ACRA(5674): at dalvik.system.NativeStart.main(Native Method)
我添加和删除片段的代码如下
FragmentContainer fragContainer = container.get(container.size() - 1);
Fragment fragment = fragContainer.getFragment();
String tag = fragContainer.getTabName();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
mTabHost.setCurrentTabByTag(tag);
if (!fragment.isAdded()) {
ft.remove(fragment);
}
if(container.size()>0)
container.remove(container.size() - 1);
ft.replace(R.id.realtabcontent, fragment);
ft.commitAllowingStateLoss();
试过
- 更新支持库
-
尝试将 onSaveInstanceState 覆盖为
@Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub if (outState != null) { super.onSaveInstanceState(outState); } }
【问题讨论】:
-
您有此问题的任何具体原因:
if (fragment.isAdded()) { ft.remove(fragment); }。我建议删除它。如果已添加片段,ft.replace(R.id.realtabcontent, fragment);将负责删除它。当您删除并重新添加相同的片段时,将引发报告的异常。它在replace方法中得到修复,该方法基本上不执行任何操作。检查这个commit message。 -
好的,根据您的评论,我删除了该代码并尝试了,但问题仍然存在。
-
你为什么用
commitAllowingStateLoss()而不是commit()? -
你找到确切的原因了吗?
-
你在使用
setRetainInstance(true)吗?对于我用作任务容器来管理 Google+ API 事物的无头片段,我一直在收到此错误,并且我正在使用setRetainInstance(true)并在快节奏的点击测试中遇到此错误(是猴子测试吗?)。删除此呼叫后,我已停止收到错误消息。遗憾的是,我无法具体说明为什么会这样。
标签: android android-fragments android-fragmentactivity