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

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.

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.

  • Configurando res srcDirs para androidTest sourceSet
  • Cómo obtener mi hotspot wifi ssid en mi sistema android actual
  • ¿Cómo se soluciona el operador '<>' no está permitido para el nivel de fuente por debajo de 1.7 en 1.6?
  • Cómo cerrar la actividad sin terminar?
  • IllegalStateException en MediaPlayer
  • Cómo llamar a un método no estático de un método estático
  • Deshabilitar todos los efectos de sonido (claves de hardware también) en Android
  • Android: ¿Cómo hacer que mi idioma de soporte de webview mientras carga una url?
  • Bibliotecas puras de codificación / decodificación de vídeo java
  • Cómo obtener el nombre checo del mes
  • Configuración de dependencias de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.