对话框片段已添加异常未抛出
Posted
技术标签:
【中文标题】对话框片段已添加异常未抛出【英文标题】:Dialog Fragment already added exception no thrown 【发布时间】:2019-01-07 19:51:38 【问题描述】:在我的应用中,我使用 DialogFragments。
有时候,我会越来越
Fragment 已添加 IllegalStateException
应用程序崩溃。这些崩溃出现在 crashlytics 上。
在第一个实例关闭之前尝试两次显示相同的对话框片段时,似乎会发生此问题。
这个问题已经讨论过很多次了,比如here 或here,但问题是,它并不是在所有设备上都保持不变。
我无法在我的办公桌上重现此问题。 即使我尝试两次显示相同的对话框,我也没有收到此异常。
我什至使用fragment.isAdded()
来确保显示它,然后再次显示它。当然只是为了捕捉错误。但没有成功。
有什么想法吗?
我可以在显示对话框之前添加fragment.isAdded()
条件以防止这种情况发生,但我想了解其根本原因。我担心我无法重现这一点。
这是我显示对话框的部分代码:
MyDialog
扩展 DialogFragment
MyDialog dialog = (MyDialog) getSupportFragmentManager().findFragmentByTag(MyDialog.TAG);
if(dialog == null) //create and show the dialog
dialog = new MyDialog();
dialog.setCancelable(false);
dialog.show(getSupportFragmentManager(), MyDialog.TAG);
【问题讨论】:
请分享代码 要重现这一点,您可以尝试多次按下DialogFragments
启动器按钮。
【参考方案1】:
我想我找到了问题所在。
首先,在这里使用dialog.isAdded()
有所帮助..
但这里的问题与应用程序的instanceState
有关。
正如我所说,此错误并非发生在所有设备或用户上,因此很难发现。
首先,我的应用配置为仅纵向。 当对话框打开时,如果用户由于某种原因(例如电话或其他应用程序)导航到其他应用程序,这反过来会导致我的应用程序进入 onStop 以及导致配置更改的其他应用程序。
例如,当对话框打开时,按主页按钮并转到手机设置并更改语言,这将导致配置更改,并且在导航返回时将重新创建应用程序。
当用户导航回我的应用程序时,它被系统杀死并尝试重新创建堆栈并且 onSaveInstanceState 不为空,对话框已经在堆栈中,我的应用程序尝试再次显示它。
这会杀死应用程序。
【讨论】:
当时你是如何解决这个问题的?以上是关于对话框片段已添加异常未抛出的主要内容,如果未能解决你的问题,请参考以下文章