Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo cambiar la página de ViewPager?

Estoy usando ViewPager en mi aplicación y lo defino en la actividad principal. Dentro del método onCreate un número de páginas de SharedPreferences y luego pasarlo a PagerAdapter:

 @Override public int getCount() { return numberOfPages; } 

El problema es que si cambiara este número en Preferencias (u otra actividad) a algún otro índice de páginas que no veía antes, mi aplicación se bloquea porque este índice está fuera de límites cuando vuelvo a la actividad con este ViewPager. Se puede corregir simplemente cambiando la página activa de ViewPager. ¿Hay alguna forma de hacerlo?

  • ViewPager con la barra de herramientas y TabLayout tiene altura incorrecta
  • Android AppBarLayout empuja ViewPager hacia abajo
  • ¿Las pestañas anidadas con el visor de desplazamiento en android?
  • Código fuente para la nueva aplicación Android Lollipop Calendar
  • División de texto a través de múltiples TextViews / Fragmentos con ViewPager
  • SetOnPageChangeListener no llama aPageSelected
  • Las pestañas de TabLayout no se muestran
  • Android: ¿Cómo agregar iconos / drawables a la PagerTabStrip de la versión 4 de Android Support Lib?
  • 5 Solutions collect form web for “¿Cómo cambiar la página de ViewPager?”

    No estoy seguro de que entiendo completamente la pregunta, pero por el título de su pregunta, supongo que lo que está buscando es pager.setCurrentItem( num ) . Esto le permite cambiar programaticamente a otra página dentro de ViewPager .

    Necesitaría ver un rastro de la pila de logcat para ser más específico si éste no es el problema.

    Sin revisar su código, creo que lo que está describiendo es que sus páginas están fuera de sincronización y tiene datos obsoletos.

    Usted dice que está cambiando el número de páginas, y luego se estrelló porque está accediendo al antiguo conjunto de páginas. Esto suena a mí como usted no está llamando pageAdapter.notifyDataSetChanged() después de cambiar sus datos.

    Cuando tu viewPager muestra la página 3 de un conjunto de 10 páginas y cambias a un conjunto con sólo 5, llama a notifyDataSetChanged() , lo que encontrarás es que ahora estás viendo la página 3 del nuevo conjunto. Si antes estaba viendo la página 8 del antiguo conjunto, después de poner el nuevo conjunto y llamar a notifyDataSetChanged() , verá que ahora está viendo la última página del nuevo conjunto sin estrellarse.

    Si simplemente cambia su página actual, puede estar enmascarando el problema.

    Para cambiar a otra página, intente con este código:

     viewPager.postDelayed(new Runnable() { @Override public void run() { viewPager.setCurrentItem(num, true); } }, 100); 

    Deslizar hacia la derecha

    ViewPager.arrowScroll (View.FOCUS_RIGHT);

    Deslizar hacia la izquierda

    ViewPager.arrowScroll (View.FOCUS_LEFT);

    Respuesta suplementaria

    Originalmente tenía problemas para obtener una referencia a ViewPager de otros métodos de clase porque el addOnTabSelectedListener hizo una clase interna anónima, que a su vez requería que la variable ViewPager fuera declarada final . La solución era utilizar una variable de miembro de clase y no utilizar la clase interna anónima.

     public class MainActivity extends AppCompatActivity { TabLayout tabLayout; ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); tabLayout = (TabLayout) findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); viewPager = (ViewPager) findViewById(R.id.pager); final PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); // don't use an anonymous inner class here tabLayout.addOnTabSelectedListener(tabListener); } TabLayout.OnTabSelectedListener tabListener = new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }; // The view pager can now be accessed here, too. public void someMethod() { viewPager.setCurrentItem(0); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.