java.lang.IllegalStateException:通过快速切换递归进入executePendingTransactions

问题描述:

我正在使用其中包含选项卡的操作栏,每个选项卡都是一个片段。除非在标签之间快速切换,否则一切都很好。当我做快速切换,我得到这个错误:java.lang.IllegalStateException:通过快速切换递归进入executePendingTransactions

java.lang.IllegalStateException: Recursive entry to executePendingTransactions 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source) 
at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 

这里是我的代码OnTapSelected

if (mFragment == null) { 

    mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity, mClass.getName(), mArgs); 
    ft.add(android.R.id.content, mFragment, mTag); 


} else { 


    ft.attach(mFragment); 
} 

什么办法可以解决这个问题?或者,如果没有,我怎么能至少赶上这个异常(像在哪里把try/catch),所以我的应用程序不会崩溃?

谢谢

+0

你在哪里提交fragmenttransaction? – toadzky

+0

我不是。当我添加一个标签监听器时,我只在构造函数中进行提交。但onTabSelected,我没有提交后添加/ attach.should我? – Snake

+0

如果您没有提交,则没有任何更改实际得到应用。我不认为它会自动提交。这里是[文档](http://developer.android.com/reference/android/app/FragmentTransaction.html#commit()) – toadzky

而不是使用附加,尝试使用显示/隐藏。你需要引用所有的片段,但是如果你将它们全部添加,然后显示正确的片段并隐藏可能修复它的其余片段。

+0

确实,它确实解决了它。谢谢so muuch – Snake

+1

@Snake请写出代码,你已经修复了,thnxu –

+0

尽管如此:这将需要更多的内存,因为所有的碎片都需要堆在堆上; OutOfMemory异常可能发生。 (我知道这是非常古老的,但人们仍然遵循这个提示)。 –