Fragmento de Android: java.lang.IllegalStateException: fragmento ya agregado

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.

Supongo que te gusta

Origin blog.csdn.net/qq_34681580/article/details/131249230
Recomendado
Clasificación