Debería tener referencias a fragmentos dentro de mi actividad

Mi aplicación tiene una MainActivity con tres pestañas ( A , B , C ).

La ficha A muestra FragmentA1 . Cuando hago clic en una entrada de lista en este fragmento, se muestra FragmentA2 (todavía en la pestaña A ). Lo mismo se aplica a las otras pestañas, algunas jerarquías van incluso más profundas ( FragmentC4 ).

Todos los cambios y reemplazos de todos los fragmentos se manejan en MainActivity by Listeners. (Editar: No defino mi fragmento en diseños XML sino en el código solamente).

Mi pregunta es:

¿Debo tener referencias a todos los fragmentos en MainActivity o debo crearlos cada vez que los necesito?

¿Cuáles son las (des) ventajas? ¿Puedo reutilizar fragmentos usando la Alternativa 1, en vez de recrearlos cada vez?

Alternativa 1:

 class MainActivity private Fragment fgmtA1; private Fragment fgmtA2; private Fragment fgmtA3; ... public onClickItemInA1(int itemId) { fgmtA2 = new FragmentA2(); // put args // replace } ... } 

Alternativa 2:

 class MainActivity ... public onClickItemInA1(int itemId) { FragmentA2 fgmtA2 = new FragmentA2(); // put args // replace } ... } 

Alternativa 3:

Tal vez la mejor solución es un enfoque completamente diferente?

¿Debo tener referencias a todos los fragmentos en MainActivity o debo crearlos cada vez que los necesito?

Depende … Las únicas dos razones por las que puedo pensar son el rendimiento y mantener el estado de un Fragmento.

Si siempre creas un nuevo Fragmento, el GC tendrá mucho que hacer, lo que podría causar algunos problemas de rendimiento si usas muchos mapas de bits o datos enormes. Puede reutilizar un Fragmento manteniendo una referencia a él en la Actividad o obteniendo el Fragmento por etiqueta o ID usando los métodos FragmentManager.findFragmentByTag (String) o FragmentManager.findFragmentById (int) . Con ellos puedes reutilizar Fragmentos ya creados, que se deben hacer por defecto.

Además, si los Fragmentos contienen algunos datos, los perderá o lo guardará en caché en otro lugar para reactivarlo si el Fragmento se destruye. Mientras reutiliza un fragmento puedes usar onSavedInstanceState () para reacrear tu estado.

Por lo tanto, sí, debe reutilizar un fragmento, ya que podría causar el rendimiento del sistema o dolores de cabeza utilizando anti-patrones para guardar algunos datos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.