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.
- ¿Cómo puedo conservar el estado de un elemento giratorio / desplegable seleccionado en el cambio de orientación?
- Orientación Cambiado Evento u Oyente Android
- Cómo detectar Orientación al revés en android?
- Mejor manera: Guardar y restaurar la posición de TextView en ScrollView
- SCREEN_ORIENTATION_LANDSCAPE al revés - ¿Por qué?
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
ofFragmentActivity
. ¿Pero si llamo asetContentView
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.
- El emulador de Android no gira al paisaje
- Cómo quitar las pestañas de ActionBar en la orientación horizontal sólo para las tabletas
- Detectar si el video se tomó en modo retrato / paisaje
- Mis opiniones se están restableciendo en el cambio de orientación
- Obtener la orientación del dispositivo de Android incluso cuando AutoRotation está desactivado
- ¿Cómo mantener abierta la ventana emergente cuando la orientación cambia en tiempo de ejecución en Android?
- Restaurar el estado de TextView después de la rotación de la pantalla?
- Averigüe si la orientación del dispositivo está bloqueada (Detectar si el giro automático está activado / desactivado)
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.
- ¿Cómo puedo configurar la imagen de fondo con picasso en el código
- ¿Cómo hacer la escritura de texto de animación?