Los fragmentos que uso en mi ViewPager
instancia consumen muchos recursos, por lo que solo me gustaría cargar uno a la vez. Cuando intento lo siguiente:
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);
Mi FragmentStatePagerAdapter.getItem(int position)
función de anulación se llama 3 veces, que es lo que sucede cuando llamo mViewPager.setOffscreenPageLimit(1)
. Esperaría que solo se llame una vez, porque especifiqué 0 páginas fuera de la pantalla.
Creo que estoy llamando todo correctamente, porque si llamo mViewPager.setOffscreenPageLimit(2)
, FragmentStatePagerAdapter.getItem(int position)
se llama 5 veces como esperaría.
¿ViewPager requiere un mínimo de 1 páginas fuera de la pantalla o estoy haciendo algo mal aquí?
android
android-viewpager
android-support-library
Chris Lacy
fuente
fuente
ViewPager.setOffscreenPageLimit(2)
funcionó para mí. TryViewPager.setOffscreenPageLimit(totTabs - 1)
Respuestas:
Si. Si estoy leyendo el código fuente correctamente, debería recibir una advertencia sobre esto en LogCat, algo como:
fuente
ViewPager
.ViewPager
crea estos fragmentos para que existan las vistas, de modo que el usuario pueda deslizarse entre ellos, con el efecto animado que muestra la vista anterior deslizándose fuera de la pantalla y la nueva vista deslizándose hacia la pantalla. Le invitamos a intentar escribir el suyo propioViewPager
que pueda deslizarse entre cosas que no existen. Puede leer más sobre esto en code.google.com/p/android/issues/detail?id=56667#c3setOffscreenPageLimit(0)
de 0. Entonces podré afrontar las consecuencias yo mismo. Un fragmento vacío predeterminado podría ser un marcador de posición, por ejemplo, hasta que se haya cargado el fragmento. Todo lo cual podría tener lugar fuera del hilo de la interfaz de usuario. De todos modos no lo he pensado mucho.ViewPager
, uno que reemplace con el contenido real cuando esté disponible. .La mejor manera que encontré fue setUserVisibleHint
agregar esto a su fragmento
fuente
Puedes probar así:
fuente
Primero agregar
que
fuente
ViewPager está predeterminado para cargar la página siguiente (Fragmento) que no puede cambiar con setOffscreenPageLimit (0). Pero puedes hacer algo para piratear. Puede implementar la función onPageSelected en Activity que contiene ViewPager. En el siguiente Fragmento (que no desea cargar), escribe una función, digamos showViewContent () donde coloca todo el código de inicio que consume recursos y no hace nada antes del método onResume (). Luego llame a la función showViewContent () dentro de onPageSelected. Espero que esto ayude.
fuente
Este puede ser un hilo antiguo, pero parece funcionar para mí. Anule esta función:
codificaciones felices ...
fuente
en mi caso, quería iniciar algunas animaciones en las vistas, pero con setUserVisibleHint obtuve algunos problemas ...
mi solución es:
1 / addOnPageChangeListener para su adaptador:
2 / implementar OnPageChangeListener:
3 / anular los 3 métodos:
4 / declara e inicializa esta variable en tu clase
aviso : tengo tres fragmentos en mi adaptador, y uso mTabState para setCurrentItem y la posición actual del adaptador que reconoce qué fragmento se muestra al usuario a tiempo ... 5 / en el método onPageSelected agregue estos códigos:
si la página anterior o la página actual es la página 0 (fragmento en la posición 0), haga esto
6 / ahora en su clase de fragmento (fragmento en la posición 0 del adaptador), debe crear un receptor de transmisión y registrarlo en el método onResume y anular el registro en los métodos de pausa:
resumen: tengo un adaptador de buscapersonas de fragmentos que muestra tres fragmentos, quiero mostrar algunas animaciones en vistas en fragmentos en la posición 0 del adaptador, para esto utilizo BroadcastReceiver. Cuando se elige un fragmento, comienzo el método de animación y le muestro las vistas al usuario, cuando el fragmento no se muestra al usuario, intento ver las vistas invisibles ...
fuente
Pruebe este código para resolver el problema de actualización de la vista en Viewpager ...
fuente
para la función "instantiateItem", simplemente prepare el fragmento, pero no cargue el contenido pesado.
Utilice "onPageChangeListener", de modo que cada vez que vaya a una página específica, cargue su contenido pesado y lo muestre.
fuente
Tengo el mismo problema. Encontré un código útil en este sitio y lo transformé.
El mínimo int para mViewPager.setOffscreenPageLimit (...); es 1, por lo que incluso si lo cambia a 0, todavía tendrá 2 páginas cargadas.
Lo primero que debe hacer es crear un int estático que llamaremos a maxPageCount y anularemos el método FragmentStatePagerAdapter getCount () para devolver maxPageCount:
Cree entonces un método estático accesible desde cualquier parte del programa que le permitirá cambiar este maxCount:
Ahora inicialice maxPageCount en 1. Cuando quiera, puede agregar otra página. En mi caso, cuando necesitaba que el usuario tratara la página actual primero antes de generar la otra. Lo hace y luego, sin problema, puede pasar a la página siguiente.
Espero que ayude a alguien.
fuente
Utilice este // crear un booleano para recuperar datos. Booleano privado isViewShown = false;
fuente