Android 片段已添加。支持库

Android 片段已添加。支持库,android,fragment,android-support-library,Android,Fragment,Android Support Library,因为我升级了我的应用程序以使用support lib rev。11并根据SDK 4.2进行编译我收到以下错误 java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i} at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159) at android.supp

因为我升级了我的应用程序以使用support lib rev。11并根据SDK 4.2进行编译我收到以下错误

java.lang.IllegalStateException: Fragment already added: i{4079e598 #2 id=0x1020002 i}
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1159)
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:729)
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1493)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:477)
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174)
我读到过有关stackoverflow的类似问题。他们中的一些人建议避免使用我没有使用的替换方法。导致回滚时崩溃的事务如下所示:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit()
其他评论说,如果您使用的片段转换不能在用户再次按下之前足够快地完成,则可能会发生这种情况。 由于我在给定片段上使用了转换动画,这可能是原因。但是,删除转换不是一个选择,因为这只发生在运行2.3.x的手机上,并且这个错误是通过升级到lib 11和sdk 4.2引入的,我希望谷歌能在下一个版本中修复它


是否有任何类似的问题,关于是否计划在4.2.1中修复此问题或支持r12的信息,或者建议我如何避免此错误?

因此,对于我来说,事实证明我实际上是在两次尝试添加片段。也许在以前的支持库版本中,它只是接受了这个,然后继续。不幸的是,即使检查片段
isAdded()
对我来说也不起作用,因为在我的情况下,我是在事务有时间实际添加第一个片段之前背靠背地调用它们的


我最后做的是创建一个布尔类变量
fragmentAdded
,并在完成事务后立即将其设置为true。然后我在尝试添加片段之前检查这个布尔值。可能不是您问题的解决方案,但对我来说确实如此,所以希望它能有所帮助。

我正在尝试使用我找到的提示来解决此问题

因此,我添加了立即执行事务:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit()
getFragmentManager().executePendingTransactions();
这将确保后台始终处于干净的状态,我希望不会有任何负面的缺点

更新 虽然它在普通手机上也能工作,但在一些没有已知安卓版本号(如4.0.1或类似版本)的通用设备上,这个问题仍然存在,而是将诸如“Thu Mar 02 2006 00:00:00 GMT+0100(MEZ)”之类的日期报告为安卓版本号,例如:samsung-espressowifixx-GT-P3110将给定日期报告为android版本,并生成添加的片段异常。。。还是挺烦人的。用户不关心这些东西,所以总是那些已经有缺陷的开发人员受到指责。
当然,对于数十亿美元的公司来说没有问题,但是单个开发者,只要花时间做一些比编写应用程序更有用的事情就行了;)

得到同样的东西,但是使用DialogFragment。我偶尔也会使用DialogFragment。。。我已经提交了一份报告。但是还没有答案。对于支持库r12,出现了相同的错误。也发布了android问题追踪器的跟踪。真的很遗憾我们需要这样做。是否真的没有方法确定是否添加了片段?我得到的是完全相同的崩溃,我根本没有使用上面的行。我只是像这样添加ft.add(newFrag).addToBackStack(null).commit()。@你能建议我编辑支持库中的FragmentManager.java类吗