片段已添加,dialogfragment? [英] Fragment already added, dialogfragment?
本文介绍了片段已添加,dialogfragment?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的对话框片段显示得很好,但是当我尝试显示它时,我不断得到IllegalStateException
I have a dialogfragment which displays fine but some time when I try to display it I keep getting IllegalStateException
下面是logcat
java.lang.IllegalStateException: Fragment already added: SelectPlan04Dialog{fa768dc #7 }
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1893)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:760)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:702)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6679)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)]
这是我调用对话框的代码
This is the code as how I am calling the dialog
if (selectPlan04Dialog == null) {
selectPlan04Dialog = new SelectPlan04Dialog();
}
if (!selectPlan04Dialog.isVisible() && !selectPlan04Dialog.isAdded()) {
Bundle b = new Bundle();
b.putSerializable("moduleApi", module);
selectPlan04Dialog.setArguments(b);
selectPlan04Dialog.show(getCurrentActivity().getSupportFragmentManager(), "");
}
推荐答案
片段事务是异步的.
在执行片段事务之前,您可能有两个或两个以上对此代码的调用. !selectPlan04Dialog.isVisible() & !selectPlan04Dialog.isAdded()
条件为true,并且show()
安排另一个片段事务以稍后执行.
It is possible that you have two or more calls to this code before the fragment transactions are executed. !selectPlan04Dialog.isVisible() & !selectPlan04Dialog.isAdded()
condition is true and show()
schedules another fragment transaction to execute later.
一些解决此问题的方法:
Some options for fixing this:
- 每次都创建一个新对话框,不要尝试重用旧对话框
- 将异步片段事务更改为与对片段管理器
executePendingTransactions()
的调用同步
这篇关于片段已添加,dialogfragment?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文