2012-12-06 48 views
11

由于我升级了我的应用程序以使用支持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) 

我看了一下计算器上类似的问题。其中一些人建议避免替换方法,我不使用。导致回滚崩溃的交易看起来是这样的:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 

其他评论说,如果你使用的片段转换用户再次按下回之前无法完成足够快,这可能会发生。 由于我在给定的片段上使用了过渡动画,这可能是原因。但是,删除的过渡并不是一个选择,因为这专门发生在运行2.3.x版本的手机和错误是通过升级到LIB 11和SDK 4.2,我希望谷歌会在下一版本中修正它推出。

任何人都有类似的问题,这样做是否计划将固定在4.2.1或支持R12或建议,我能做些什么来规避错误的信息?所以对我来说

+0

获得同样的事情,但'DialogFragment'。 –

+0

我也DialogFragment得到它偶尔...我[这里]提交了报告(http://code.google.com/p/android/issues/detail?id=41552&thanks=41552&ts=1355757013)。但还没有答案。 – phlebas

+0

对于支持库r12有同样的错误。发布跟踪到android问题跟踪器。 – Sash0k

回答

6

我试图使用提示,我发现here

因此,我增加executePendingTransactions()立即执行交易来解决该问题:

ft.remove(oldFrag).add(newFrag).addToBackStack(null).commit() 
getFragmentManager().executePendingTransactions(); 

这应该确保堆栈中始终处于清洁状态我希望也没有任何可以想到的负面缺点。

更新 虽然它在普通电话的工作,问题仍然在不具有已知的Android版本号,比如4.0.1或类似的一些通用的设备,而是报告一些类似日期“周四3月2 2006 00:00:00 GMT + 0100(MEZ)'作为Android版本号,例如:samsung - espressowifixx - GT-P3110将给定的日期报告为android版本,并产生片段添加异常...仍令人讨厌。用户不关心这个东西,所以它始终是被指责的已经是缺陷的开发者。 为十亿美元的公司,当然,但单一的开发商没问题,只是做更有用的东西与你的时间比写的应用程序;)

+0

我得到确切的相同的崩溃,我根本不使用上面的行。我只是像这样添加ft.add(newFrag).addToBackStack(null).commit()。 – tasomaniac

+0

@phlebas你能否建议我编辑支持库中的FragmentManager.java类 – Adi

+0

请提及你的代码。 –

5

,事实证明,我其实是想增加一个片段的两倍。也许在以前的支持库版本中,它只是吞噬了这个并继续前进。不幸的是,即使检查片段isAdded()对我来说不起作用,因为在我的情况下,我在事务有时间实际添加第一个片段之前将它们调回。

我最终什么事做是创造一个布尔类变量fragmentAdded并将其设置为true后我做了交易。然后在试图添加片段之前检查这个布尔值。可能不是你的问题的解决方案,但对我来说,这是希望它有帮助。

+5

真的很伤心,我们需要这样做。是否真的没有方法可以确切地说明片段是否已被添加? –

相关问题