问题描述
在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会异常
网友评论