Estoy usando ViewPager en mi aplicación y lo defino en la Actividad principal. Dentro del onCreate
método, cargo algunas páginas de SharedPreferences y luego lo paso a PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
El problema es que si cambiara este número en Preferencias (u otra Actividad) a otro menos que el índice de página que vi antes, mi aplicación se bloquea porque este índice está fuera de límites cuando vuelvo a la actividad con este ViewPager. Se puede solucionar simplemente cambiando la página activa de ViewPager. ¿Hay alguna forma de hacerlo?
fuente
0
enonPause
método y no hay bloqueos. Gracias.deslizar hacia la derecha
viewPager.arrowScroll (View.FOCUS_RIGHT);
deslizar hacia la izquierda
viewPager.arrowScroll (View.FOCUS_LEFT);
fuente
Sin verificar su código, creo que lo que está describiendo es que sus páginas no están sincronizadas y tiene datos obsoletos.
Dice que está cambiando la cantidad de páginas y luego se bloquea porque está accediendo al antiguo conjunto de páginas. Esto me parece que no estás llamando
pageAdapter.notifyDataSetChanged()
después de cambiar tus datos.Cuando
viewPager
está mostrando la página 3 de un conjunto de 10 páginas, y cambia a un conjunto con solo 5, luego llamenotifyDataSetChanged()
, lo que encontrará es que ahora está viendo la página 3 del nuevo conjunto. Si anteriormente estaba viendo la página 8 del conjunto anterior, después de colocar el nuevo conjunto y llamarnotifyDataSetChanged()
, verá que ahora está viendo la última página del nuevo conjunto sin fallar.Si simplemente cambia su página actual, puede estar ocultando el problema.
fuente
notifyDataSetChanged()
para cambiar a otra página, intente con este código:
fuente
viewPager.setCurrentItem
Respuesta suplementaria
Originalmente tenía problemas para obtener una referencia
ViewPager
de otros métodos de clase porqueaddOnTabSelectedListener
creaba una clase interna anónima, que a su vez requeríaViewPager
que se declarara la variablefinal
. La solución fue usar una variable miembro de clase y no usar la clase interna anónima.fuente