Saltar al contenido

¿Cuál es la diferencia entre FragmentPagerAdapter y FragmentStatePagerAdapter?

La guía o código que encontrarás en este artículo es la solución más eficiente y efectiva que hallamos a tu duda o problema.

Solución:

Como dicen los documentos, piénsalo de esta manera. Si tuviera que hacer una aplicación como un lector de libros, no querrá cargar todos los fragmentos en la memoria a la vez. Te gustaría cargar y destruir Fragments como el usuario lee. En este caso usarás FragmentStatePagerAdapter. Si solo está mostrando 3 “pestañas” que no contienen muchos datos pesados ​​(como Bitmaps), entonces FragmentPagerAdapter te puede ir bien. Además, tenga en cuenta que ViewPager por defecto cargará 3 fragmentos en la memoria. El primero Adapter que mencionas podría destruir View jerarquía y recargarlo cuando sea necesario, el segundo Adapter solo guarda el estado del Fragment y lo destruye por completo, si el usuario vuelve a esa página, se recupera el estado.

FragmentStatePagerAdapter:

  • con FragmentStatePagerAdaptersu fragmento innecesario se destruye. Se confirma una transacción para eliminar completamente el fragmento de su actividad. FragmentManager.

  • el estado en FragmentStatePagerAdapter proviene del hecho de que salvará su fragmento Bundle desde savedInstanceState cuando se destruye. Cuando el usuario navega hacia atrás, el nuevo fragmento se restaurará utilizando el estado del fragmento.

Adaptador de paginación de fragmentos:

  • por comparación FragmentPagerAdapter no hace nada por el estilo. Cuando el fragmento ya no es necesario.FragmentPagerAdapter llamadas
    detach(Fragment) en la transacción en lugar de remove(Fragment).

  • Esto destruye la vista del fragmento pero deja viva la instancia del fragmento en el FragmentManager.así que los fragmentos creados en el
    FragmentPagerAdapter nunca se destruyen.

Aquí hay un ciclo de vida de registro de cada fragmento en ViewPager que tienen 4 fragmentos y offscreenPageLimit = 1 (default value)

FragmentStatePagerAdapterFragmentStatePagerAdapter

Ir a Fragment1 (actividad de lanzamiento)

Fragment1: onCreateView
Fragment1: onStart
Fragment2: onCreateView
Fragment2: onStart

Ir a Fragmento2

Fragment3: onCreateView
Fragment3: onStart

Ir a Fragmento3

Fragment1: onStop
Fragment1: onDestroyView
Fragment1: onDestroy
Fragment1: onDetach
Fragment4: onCreateView
Fragment4: onStart

Ir a Fragmento4

Fragment2: onStop
Fragment2: onDestroyView
Fragment2: onDestroy

FragmentPagerAdapterFragmentPagerAdapter

Ir a Fragment1 (actividad de lanzamiento)

Fragment1: onCreateView
Fragment1: onStart
Fragment2: onCreateView
Fragment2: onStart

Ir a Fragmento2

Fragment3: onCreateView
Fragment3: onStart

Ir a Fragmento3

Fragment1: onStop
Fragment1: onDestroyView
Fragment4: onCreateView
Fragment4: onStart

Ir a Fragmento4

Fragment2: onStop
Fragment2: onDestroyView

Conclusión: FragmentStatePagerAdapter llamar onDestroy cuando el Fragmento es superado offscreenPageLimit mientras FragmentPagerAdapter no.

Nota: Creo que deberíamos usar FragmentStatePagerAdapter para ViewPager que tienen mucha página porque será bueno para el rendimiento.

Ejemplo de offscreenPageLimit:

Si vamos a Fragment3, será destruir Fragment1 (o Fragment5 si tiene) porque offscreenPageLimit = 1. si establecemos offscreenPageLimit > 1 eso no lo haré destruir.
Si en este ejemplo establecemos offscreenPageLimit=4no hay diferencia entre usar FragmentStatePagerAdapter o FragmentPagerAdapter porque Fragment nunca llama onDestroyView y onDestroy cuando cambiamos de pestaña

Demostración de Github aquí

Más adelante puedes encontrar las notas de otros gestores de proyectos, tú igualmente eres capaz mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *