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


IndexOutOfBoundsException en TabLayout en la librería de diseño de soporte de android

Uso android.support.design en todos mis proyectos, y hoy lo he actualizado a la última versión

Com.android.support:design:22.2.1

  • Obtener NoSuchFieldError INSTANCE org / apache / http / message / BasicHeaderValueParser
  • Android fill_parent a match_parent
  • Apache conexión HTTP con Android 6.0 (Marshmallow)
  • Uso de la preferencia de lista en Android
  • ¿Cuándo se destruye un servicio iniciado y enlazado?
  • ¿Qué tipo de formatos de imagen debo utilizar en una aplicación de Android?
  • Fue una mala idea, porque mi proyecto se estrelló con

    java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) java.util.ArrayList.get(ArrayList.java:308) android.support.design.widget.TabLayout.getTabAt(TabLayout.java:407) android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:585) 

    Después de algunos depuración, encontré un problema en este método:

      public void setupWithViewPager(@NonNull ViewPager viewPager) { PagerAdapter adapter = viewPager.getAdapter(); if(adapter == null) { throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set"); } else { this.setTabsFromPagerAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(this)); this.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); if(this.mSelectedTab == null || this.mSelectedTab.getPosition() != viewPager.getCurrentItem()) { this.getTabAt(viewPager.getCurrentItem()).select();// ERROR On my code I'm used empty adapter } } } 

    Pero en la versión anterior 22.2.0 de lib, todo funcionaba bien:

      public void setupWithViewPager(ViewPager viewPager) { PagerAdapter adapter = viewPager.getAdapter(); if(adapter == null) { throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set"); } else { this.setTabsFromPagerAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(this)); this.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); } } 

    ¿Quién lo hizo y quién puede ser castigado por ello?

    Por favor, ayúdame a encontrar desarrolladores para Android.

  • Cómo puedo recibir notificaciones de GCM cuando se detiene la aplicación
  • Crossfading con TransitionDrawable no funciona en android
  • Retrofit "IllegalStateException: Ya ejecutado"
  • Buscando buenas fuentes para iconos, ilustraciones, etc
  • Qué se genera y las carpetas intermedias en el directorio de la estructura y porqué la carpeta de las salidas falta
  • Hacer botones que parezcan pestañas en android
  • 2 Solutions collect form web for “IndexOutOfBoundsException en TabLayout en la librería de diseño de soporte de android”

    Me encantaría comentar con esto, pero no tengo la reputación.

    Parece que este problema se está realizando un seguimiento y un seguimiento de una corrección en una versión futura: https://code.google.com/p/android/issues/detail?id=180453

    Mi conjetura es que su problema se debe a:

     // ERROR On my code I'm used empty adapter 

    Al parecer, TabLayout no le gusta los adaptadores vacíos. Esto no me sorprende.

    Por lo tanto, no llame a setupWithViewPager() inmediato. Cuando finalmente actualiza su PagerAdapter para devolver un valor distinto de cero de getCount() , puede llamar a setupWithViewPager() . La segunda y las veces siguientes cambia el PagerAdapter , después de llamar a notifyDataSetChanged() en el adaptador, llame a setTabsFromPagerAdapter() para actualizar las fichas para alinearlas con el contenido de PagerAdapter . Puede utilizar un boolean para realizar un seguimiento si necesita llamar a setupWithViewPager() o setTabsFromPagerAdapter() .

    Sin duda, puede presentar una solicitud de función para TabLayout para admitir adaptadores vacíos.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.