¿Cómo se manejan las transacciones de fragmentos cuando el estado de la actividad principal está destinado a ser guardado?
Mi aplicación tiene varios fragmentos y actividades. A lo largo del ciclo de vida de la actividad de la principal de los padres, la aplicación presenta información / opciones al usuario en otras actividades.
La documentación de Fragmentos tiene la siguiente estipulación para commit ():
- FragmentTransaction.replace reemplaza sólo el primer Fragment en un contenedor
- Cómo borrar backStack de soporte FragmentManager?
- Fragmento de Android: ¿se mueve de una vista a otra?
- Cómo agregar un fragmento a un diseño de un DialogFragment?
- Cómo mostrar el fragmento de entrada sobre el fragmento de salida mientras se anima.
Precaución: puede validar una transacción utilizando commit () sólo antes de que la actividad guarde su estado (cuando el usuario abandona la actividad). Si intenta cometer después de ese punto, se lanzará una excepción. Esto se debe a que el estado después del commit se puede perder si la actividad necesita ser restaurada. Para situaciones en las que está bien que pierda el commit, use commitAllowingStateLoss ().
El problema es que después de regresar a la actividad principal, ya no puedo usar FragmentTransactions que son parte integral de la forma en que he diseñado la navegación en la aplicación.
Una solución que he pensado es cambiar mis actividades a los fragmentos, sin embargo, mi aplicación también utilizará en la aplicación de facturación que creo que siempre iniciará su propia actividad. Esto parece una restricción enorme – en algún momento en el desarrollo voy a terminar teniendo que mostrar una actividad aparte.
Probablemente podría salir con el uso de commitAllowingStateLoss (), pero me siento como si me falta un concepto importante en Android tablet desarrollo de aplicaciones. ¿Hay una manera de comenzar las actividades entonces vuelve a la actividad del padre (que maneja fragmentos) sin perder la capacidad de cometer FragmentTransactions?
- FragmentTransacation con diapositiva en / out animación en> 4 rendimiento
- Se hace clic en un diseño invisible detrás del fragmento:
- Java.lang.IllegalArgumentException: No se encontró ninguna vista para id 0x1020002 (android: id / content) para el fragmento
- Salir de la animación no funciona; FragmentTransaction animación personalizada no funciona para ocultar
- FragmentManager.getFragmens (). Size () no disminuyen después de FragmentTransaction.remove (Fragment)
- Android: Fragmento de diálogo y problemas de Backstack
- ¿Cómo funciona el nuevo FragmentTransaction commitNow () trabajando internamente?
- ViewPager dentro de Fragmento desaparece después de transaction.remove () (Mantener instancia?)
Puede volver a realizar transacciones de fragmentos una vez que se haya reiniciado / iniciado su actividad principal, incluso si se ha detenido previamente. Los documentos sólo significan que no se puede confirmar durante el período de tiempo en el que se ha detenido la actividad (y se ha guardado el estado) y antes de que se reanude. Si regresa a su actividad principal después de visitar otra actividad, puede utilizar las transacciones de fragmentos de nuevo después de que se haya llamado Activity.onStart()
.
La razón de esta restricción es que Android guarda el estado de los fragmentos asociados con una actividad durante Activity.onSaveInstanceState()
. Si intentas hacer transacciones de fragmentos después de este punto, entonces estarás expuesto a la pérdida de estado si Android necesita volver a crear esa actividad (ya que la información que utiliza para recrear el estado de Actividad fue sólo los datos que se capturaron en Activity.onSaveInstanceState()
).
- Cómo utilizar un kit de interfaz de usuario (PSD) en una aplicación de Android
- Cómo extraer muestras de PCM de la salida del decodificador de MediaCodec