当我们快速点击某个按钮弹出一个DialogFragment的时候,有时候就会出现这个异常,可以通过debug能复现这个异常
####解决方法####
if (dialogFragment == null) {//初始化DialogFragment
dialogFragment = DialogFragment.getInstance();
}
if (!dialogFragment.isAdded()) {// 判断是否已添加
dialogFragment.show(getSupportManager(),
DialogFragment.getClass.getName);
}
// 在BaseDialogFragment里面重写show方法,注意最后一句是重点
public void show(FragmentManager manager) {
String tag = getClass().getName();
show(manager, tag);
manager.executePendingTransactions();
}
完美解决
20181107更新,上次修改之后,上线,结果还特么报这个错了,啪啪打脸。
网上解释的原因是activity不在前台,然后调用onSaveInstanceState方法的时候,这个时候再调用fragment的show方法,导致奔溃。解决方法是在show方法里面不用commit,而使用commitAllowStateLoss代替。
如何触发并测试这个bug呢?用Handler延迟10s显示一个dialogFragment,然后点返回键,这样就会出现这个异常,从而确定是否真的解决了。
另外一种方案是
`override fun show(manager: FragmentManager?, tag: String?) {
if (manager == null)
return
if (Integer.valueOf(android.os.Build.VERSION.SDK) > Build.VERSION_CODES.JELLY_BEAN) {
if (manager.isDestroyed)
return
}
try {
super.show(manager, tag)
} catch (e: Exception) {
e.printStackTrace()
}
}
感谢
原文链接