java.lang.illegalstateexception fragment already added dialogfragment

当我们快速点击某个按钮弹出一个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()
    }
}

感谢
原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值