java.lang.IllegalStateException:

作者: 喂_balabala | 来源:发表于2020-11-27 10:58 被阅读0次
    问题描述

    在DialogFragment中重复调用show(manager: FragmentManager?, tag: String?)导致崩溃,提示IllegalStateException: Fragment already added
    并且manager?.findFragmentByTag(tag)找到的fragment是空,isAdded也是false

    解决方案

    方案一:

    override fun show(manager: FragmentManager?, tag: String?) {
            try {
                //在每个add事务前增加一个remove事务,防止连续的add
                manager?.beginTransaction()?.remove(this)?.commit()
                super.show(manager, tag)
            } catch (e: Exception) {
                //同一实例使用不同的tag会异常,这里捕获一下
                e.printStackTrace()
            }
        }
    

    方案二:

    override fun show(manager: FragmentManager?, tag: String?) {
            try {
                manager?.beginTransaction()?.commitAllowingStateLoss()
                manager?.executePendingTransactions()
                if (isAdded){
                    return
                }
                super.show(manager, tag)
            }catch (e: Exception){
                e.printStackTrace()
            }
        }
    
    总结

    推荐方案二, 方案一在同一实例使用不同的tag会异常

    相关文章

      网友评论

        本文标题:java.lang.IllegalStateException:

        本文链接:https://www.haomeiwen.com/subject/hvxxwktx.html