viewpager studio example español activity android android-fragments android-viewpager

android - studio - Evite que ViewPager destruya vistas fuera de pantalla



tabbed activity android studio español (3)

Tengo un ViewPager conectado a un FragmentPagerAdapter que muestra tres fragmentos. El ViewPager parece destruir la vista de un fragmento alojado cuando está a más de un deslizamiento de la posición actual.

Estas vistas son listas simples y esta optimización es completamente innecesaria, así que me gustaría deshabilitarla. Está causando algunos problemas visuales porque las listas tienen animaciones de diseño aplicadas y esas animaciones se reproducen después de que se destruyeron y recrearon. También muestra la animación de introducción de barra de desplazamiento cada vez (donde la barra de desplazamiento es brevemente visible para indicar que es posible desplazarse) lo que puede distraer, y la posición de desplazamiento actual del usuario se pierde en el proceso.

Tampoco carga el tercer fragmento hasta que ocurre el primer deslizamiento, lo cual es problemático porque cada fragmento maneja sus propias llamadas de servicio y preferiría tener los tres encendidos al mismo tiempo cuando se carga la actividad. Tener la tercera llamada de servicio demorada es menos que ideal.

¿Hay alguna manera de convencer a ViewPager para detener este comportamiento y simplemente mantener todos mis fragmentos en la memoria?



De forma predeterminada, ViewPager recrea los fragmentos cuando desliza la página. Para evitar esto, puedes probar una de estas dos cosas:

1. En el onCreate () de sus fragmentos, llame a setRetainInstance (true).

2. Si la cantidad de fragmentos es fija y relativamente pequeña, en su onCreate () agregue el siguiente código:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(3);

Si mal no recuerdo, la segunda opción es más prometedora. Pero le insto a probar ambos y ver cuál de ellos funciona.


En la revisión 4 del Support Package, se agregó un método a ViewPager que le permite especificar el número de páginas fuera de pantalla para usar, en lugar del valor predeterminado que es 1.

En su caso, desea especificar 2, de modo que cuando se encuentre en la tercera página, el primero no se destruirá, y viceversa.

mViewPager = (ViewPager)findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(2);