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

Cuando se utiliza FragmentActivity restaura automáticamente el estado de fragmento y recrea todos los fragmentos.

Sé que esto se hace principalmente guardando el estado en onSaveInstanceState y luego restaurado en la actividad onCreate . Buscando un poco en el código he visto que todos los fragmentos se recrean (o sólo se adjunta si retainInstance es cierto) y se agrega a la FragmentManager pero no está claro para mí en qué forma se agregan a la vista, porque la vista no es Automáticamente restaurado.

Mis problemas originales fueron que tengo duplicados de algunos fragmentos similares a esa otra pregunta . Yo workarround que 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 se unen 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 el fragmento ata a la visión?
  • ¿Puedo evitar la recreación de fragmentos sin sobrescribir onSaveInstanceState ? Debido a que con diferentes diseños de orientación con diferentes números de fragmentos mi intención original era recrear sólo un fragmento de estado marcado como retenido y no restaurar los otros 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() , tiene que restaurar todas las vistas (desde xml o mediante programación). Cada ViewGroup que contiene un fragmento debe tener el mismo ID que cuando lo creó la primera vez. Una vez que se crea la jerarquía de vista, Android restaura todos los fragmentos y pone sus vistas en el grupo de ViewGroup derecho gracias al ID. Digamos que Android recuerda el ID del ViewGroup en el que estaba un fragmento. Esto ocurre entre onCreateView() y onStart() .

Creo que podría ser posible mantener la recreación fragmento, pero, en el ViewGroup que sostienen el fragmento, establecer la visibilidad de GONE. De esta manera, el fragmento no aparece y se puede quitar programaticamente después.

  • Reproductor multimedia no carga cuando la actividad recreada en la orientación cambia android
  • Orientación de la captura de la cámara en dispositivos samsung en android
  • ¿Por qué se llama onCreate () después de onConfigurationChanged?
  • Cambio de la imagen de fondo de la vista en el cambio de orientación
  • Manera de la insensatez a manejar Fragmento en cambio de la orientación
  • Configuración de la orientación EXIF ​​de Android Photo
  • Fragmentos dentro de ViewPager desaparecen cuando cambia la orientación
  • Bloqueo de ScreenOrientation
  • Manejar estados de cambios de orientación
  • Cambiar orientación en tiempo de ejecución
  • Android TimePicker parece recortado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.