es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Doble fragmento de instancia cuando proviene del fondo de pantalla.

Tengo problema con la creación de múltiples instancias de fragmentos en OnCreate. Cuando cierro la aplicación utilizando el botón Inicio y vuelvo a la aplicación, se crea una instancia adicional del fragmento. ¿Cómo puedo evitar esto?

fragment = FragmentMain.newInstance(intent.extras?.getSerializable(DATA_MAIN)).also {
        supportFragmentManager.beginTransaction()
                .add(frameLayout.id, it, FragmentMain::class.java.simpleName)
                .addToBackStack(FragmentMain::class.java.simpleName)
                .commit()
               }
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para evitar la creación de múltiples instancias de fragmentos en onCreate cuando la aplicación se reanuda después de cerrarla mediante el botón de Inicio, puedes verificar si el fragmento ya existe antes de crear una nueva instancia. Utiliza el método findFragmentByTag para comprobar si el fragmento ya existe en el FragmentManager y solo crea una nueva instancia si no existe.

    Aquí tienes un fragmento de código actualizado:

    val fragmentTag = FragmentMain::class.java.simpleName
    val fragmentManager = supportFragmentManager
    var fragment = fragmentManager.findFragmentByTag(fragmentTag) as? FragmentMain
    
    if (fragment == null) {
        fragment = FragmentMain.newInstance(intent.extras?.getSerializable(DATA_MAIN))
        fragmentManager.beginTransaction()
            .add(frameLayout.id, fragment, fragmentTag)
            .addToBackStack(fragmentTag)
            .commit()
    }
    

    En este código actualizado, primero definimos una etiqueta para el fragmento (fragmentTag) y obtenemos una referencia al FragmentManager. Luego comprobamos si el fragmento ya existe en el FragmentManager llamando a findFragmentByTag utilizando la etiqueta del fragmento. Si el fragmento devuelto no es nulo (es decir, ya existe), simplemente lo convertimos al tipo correcto (FragmentMain) y lo utilizamos. Si el fragmento es nulo (es decir, no existe), creamos una nueva instancia utilizando FragmentMain.newInstance, lo agregamos al FragmentManager utilizando beginTransaction y confirmamos la transacción como antes. De esta manera, nos aseguramos de que solo exista una instancia del fragmento en el FragmentManager en cualquier momento dado, evitando la creación de instancias duplicadas cuando se reanuda la aplicación.

Comments are closed.