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?

  • Motionevent.getX y getY
  • ¿Cómo hacer que org-mobile trabaje en android?
  • Cómo solucionar: "HAX no funciona y emulador se ejecuta en modo de emulación"
  • Compartición de Android en Twitter
  • ¿Cómo comprobar si un dispositivo en particular soporta redes 4G en Android?
  • Después de cambiar la orientación de la pantalla, el diálogo aparece aparentemente sin ninguna llamada
  • Android: ¿Ajusta la pantalla cuando aparece el teclado?
  • Proyecto de Android se queja "Los tornillos de tipo.Task no se puede resolver. Se hace referencia indirectamente a los archivos .class necesarios "
  • Enviar un objeto personalizado mediante la carpeta nativa de Android
  • FILL_PARENT y MATCH_PARENT
  • Moshi vs Gson en android
  • Ejecutar otro AsyncTask en onPostExecute ()
  • 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.