Estoy diseñando una aplicación que permite a los usuarios pasar de una página a otra en una ViewPager. He estado luchando por descubrir cómo es posible eliminar una instancia de Fragment de una página cuando ya no está visible en la pantalla, almacenarla en caché (por ejemplo, un HashMap) y restaurarla para que cuando el usuario vuelve a esa página, las vistas y todo lo demás estará en el mismo estado que antes de la eliminación. Por ejemplo, mi primera página es una pantalla de inicio de sesión que hace que ciertos elementos de diseño en esa página en particular sean visibles/invisibles en un inicio de sesión exitoso. Cuando paso hacia adelante suficientes páginas y vuelvo a la primera página, el diseño se restablece. Esto se convierte en un problema para otra de mis páginas que contiene una gran cuadrícula de datos de desplazamiento horizontal/vertical que utilizo un hilo en el fondo para dibujar cuando se inicializa. Utilizo un diálogo de progreso para notificar al usuario sobre el progreso de la carga y eso se vuelve realmente molesto cada vez que tengo que cargarlo.Android: Viewpager y FragmentStatePageAdapter
por lo que hice algunas investigaciones ...
he echado un vistazo a través del código fuente para FragmentStatePageAdapter y en la devolución de llamada destroyItem(), el estado de la instancia Fragmento de ser eliminado se guarda en un ArrayList. Cuando se crea una nueva instancia del Fragmento en la devolución de llamada instantiateItem(), si todavía no existe una instancia de un elemento (realizan un seguimiento de esto utilizando una ArrayList), se crea una nueva instancia de Fragment y se guarda su estado se inicializa con los datos Fragment.SavedState correspondientes. Desafortunadamente, estos datos no incluyen el estado en el que se encontraban las Vistas aunque noté que para las páginas con GridView/ListView, el estado de las Vistas se restauraba de alguna manera (si me desplazaba a una posición aleatoria, volteaba algunas páginas y regresaba , no se restablecería).
Según la API:
El estado guardado no puede contener dependencias de otros fragmentos - que es que no puede utilizar putFragment (Bundle, String, fragmento) para almacenar una referencia fragmento porque esa referencia puede no ser válida cuando este estado guardado se usa posteriormente. Del mismo modo, el objetivo y el resultado del Fragmento no se incluyen en este estado.
Al ser un novato en Android, no estoy muy seguro de entender la última declaración.
Dicho esto, ¿hay alguna manera de almacenar en caché el estado de la vista? Si no, creo que seguiré adelante y dejaré todas las páginas de fragmentos en la memoria.
Es necesario heredar de FragmentStatePagerAdapter, si sólo utiliza FragmentPagerAdapter continuación onSaveInstanceState no se llamará. – Scott