对话框片段已添加异常,未引发

时间:2018-07-31 12:04:25

标签: android android-fragments android-dialogfragment dialogfragment

在我的应用中,我使用DialogFragments。

有时候,我会得到

  

片段已添加IllegalStateException

,应用崩溃。这些崩溃是在crashlytics上看到的。

在第一个实例被解雇之前尝试显示相同的对话框片段两次时,似乎会发生此问题。

这个问题已经像herehere一样被讨论过很多次,但问题是,它并不是在所有设备上都保持不变的行为。

我无法在办公桌上重现此问题。 即使我尝试两次显示相同的对话框,也不会出现此异常。

我什至使用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);

1 个答案:

答案 0 :(得分:0)

我想我已经找到问题了。

首先,在这里使用dialog.isAdded()有帮助。 但是这里的问题与该应用的instanceState有关。

正如我所说,此错误并非在所有设备或用户上都发生,因此很难发现。

首先,我的应用配置为仅纵向。 对话框打开时,如果用户由于某种原因导航到某个其他应用程序(例如电话或其他应用程序),这又导致我的应用程序进入onStop并导致该其他应用程序更改配置。

例如,当对话框打开时,按主屏幕按钮并转到手机设置并更改语言,这将导致配置更改,并在导航到该应用时重新创建该应用。

当用户导航回到我的应用程序时,它被系统杀死,并尝试重新创建堆栈,并且onSaveInstanceState不为null,对话框已经在堆栈中,并且我的应用程序尝试再次显示它。

这会杀死该应用程序。