Descripción del problema
Las llamadas repetidas a show(manager: FragmentManager?, tag: String?) en DialogFragment provocaron un bloqueo, lo que generó IllegalStateException: Fragmento ya agregado
y el fragmento encontrado por manager?.findFragmentByTag(tag) estaba vacío e isAdded también era falso.
solución
Opcion uno:
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()
}
}
Opción II:
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()
}
}
Resumir
Solución recomendada 2. Solución 1: el uso de diferentes etiquetas en la misma instancia provocará una excepción. Consulte
el artículo
java.lang.IllegalStateException: fragmento ya agregado
para obtener soluciones a java.lang.IllegalStateException: fragmento ya agregado.