studio implement how fragments example create configchanges android android-fragments android-orientation

how - implement fragment in android



Cómo funciona la restauración automática de fragmentos (1)

Cuando se utiliza FragmentActivity , restaura automáticamente el estado del fragmento y vuelve a crear todos los fragmentos.

Sé que esto se hace principalmente guardando el estado en onSaveInstanceState y luego restaurado en onCreate la actividad. Mirando un poco el código, he visto que todos los fragmentos se recrean (o solo se adjuntan si retenerInstancia es verdadero) y se agregan al FragmentManager pero no me queda claro de qué manera se agregan a la vista, porque la vista no lo es. Restaurado automáticamente.

Mis problemas originales fueron que obtengo duplicados de algunos fragmentos similares a esa otra pregunta . Lo onCreate en onCreate con:

Fragment f = fm.findFragmentByTag(tagName); if(f==null) { f = createFragment(); fm.beginTransaction().add(R.id.myContainer,f,tagName).commit(); } else { //Nothing it''s on the view }

Ahora funciona, pero todavía no entiendo completamente cómo funciona.

Mis dudas son:

  • ¿En qué momento y cómo están unidos los fragmentos a la vista? He experimentado que la restauración de fragmentos se realiza en onCreate of FragmentActivity . Pero si llamo a setContentView después de eso, ¿cómo se adjunta el fragmento a la vista?
  • ¿Puedo evitar la recreación de fragmentos sin sobrescribir en onSaveInstanceState ? Debido a que los diferentes diseños de orientación con diferente número de fragmentos, mi intención original era recrear solo un fragmento de estado marcado como retenido y no restaurar los demás fragmentos de vista que no están marcados como retenidos.

Ver jerarquía en no restaurado automáticamente. Por lo tanto, en Fragment.onCreateView() o Activity.onCreate() , debe restaurar todas las vistas (desde xml o programáticamente). Cada grupo de ViewGroup que contiene un fragmento debe tener la misma ID que la primera vez que lo creó. Una vez que se crea la jerarquía de vistas, Android restaura todos los fragmentos y coloca sus vistas en el ViewGroup correcto gracias al ID. Digamos que Android recuerda la ID del grupo de ViewGroup en el que se encontraba un fragmento. Esto sucede en algún lugar entre onCreateView() y onStart() .

Creo que podría ser posible mantener la recreación del fragmento pero, en el ViewGroup que contiene el fragmento, establezca la visibilidad en GONE. De esta manera, el fragmento no aparece y puede eliminarlo programáticamente más adelante.