8

Mi aplicación tiene varios fragmentos y actividades. En el transcurso del ciclo de vida de la actividad principal principal, la aplicación presenta información/opciones para el usuario en otras actividades.¿Cómo se manejan las transacciones de fragmentos cuando el estado de la actividad principal está destinado a ser guardado?

La documentación para Fragmentos tiene la siguiente estipulación para comprometerse():

Precaución: Puede confirmar una transacción utilizando comprometerse() sólo antes de la actividad de ahorro de su estado (cuando el usuario abandona la actividad) . Si intentas comprometerte después de ese punto, se lanzará una excepción. Esto se debe a que el estado después de la confirmación puede perderse si la actividad necesita ser restaurada. Para situaciones en las que está bien que pierdas la confirmación, utiliza commitAllowingStateLoss().

El problema es que, después de volver a la actividad principal, ya no puedo usar FragmentTransactions, que son parte integral de la navegación que he diseñado en la aplicación.

Una solución en la que he pensado es cambiar mis actividades a fragmentos; sin embargo, mi aplicación también usará la facturación en la aplicación, que creo que siempre comenzará su propia actividad. Esto parece una gran restricción: en algún momento del desarrollo tendré que mostrar una actividad separada.

Probablemente podría salirse con la suya con commitAllowingStateLoss(), pero siento que me falta un concepto importante en el desarrollo de aplicaciones para tabletas Android. ¿Hay alguna manera de comenzar actividades y luego volver a la actividad principal (que gestiona los fragmentos) sin perder la capacidad de cometer FragmentTransactions?

+1

Leer esto [** publicación de blog **] (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) podría ayudar. –

Respuesta

3

Puede volver a confirmar las transacciones de fragmento cuando se reanuda/inicia su actividad primaria, incluso si se pausó previamente. Los documentos solo significan que no puede comprometerse durante el período de tiempo en el que la actividad está en pausa (y el estado se ha guardado) y antes de que se haya reanudado nuevamente. Si regresa a su actividad principal después de visitar otra actividad, puede volver a utilizar las transacciones de fragmento una vez que se haya llamado al Activity.onStart().

El motivo de esta restricción es que Android guarda el estado de los fragmentos asociados con una actividad durante Activity.onSaveInstanceState(). Si intenta realizar transacciones de fragmentos después de este punto, estará expuesto a la pérdida de estado si Android necesita volver a crear + restaurar esa actividad (ya que la información que utiliza para recrear el estado Actividad fue solo la información capturada en Activity.onSaveInstanceState()).

Cuestiones relacionadas