Android支持devise库中的TabLayout中的IndexOutOfBoundsException

我在我的所有项目中使用android.support.design ,今天我更新到最新版本

com.android.support:design:22.2.1

这是一个坏主意,因为我的项目崩溃了

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) 

经过一些debugging,我发现这个方法有问题:

  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 } } } 

但在lib的以前版本22.2.0中,所有工作都正常:

  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)); } } 

谁做的,谁能受到惩罚?

请帮我找Android开发者支持devise库。

Solutions Collecting From Web of "Android支持devise库中的TabLayout中的IndexOutOfBoundsException"

我只想评论一下,但是我没有名气。

看起来这个问题正在被追踪,并在以后的版本中被修复: https : //code.google.com/p/android/issues/detail?id=180453

我的猜测是你的问题是由于:

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

显然, TabLayout不喜欢空的适配器。 这并不令我感到惊讶。

所以,请不要立即调用setupWithViewPager() 。 当你最终更新你的PagerAdapter来从getCount()返回一个非零值时,你可以调用setupWithViewPager() 。 第二次和以后,您更改PagerAdapter ,调用适配器上的notifyDataSetChanged()后,调用setTabsFromPagerAdapter()刷新选项卡以与PagerAdapter内容alignment。 您可以使用boolean来跟踪您是否需要调用setupWithViewPager()setTabsFromPagerAdapter()

当然欢迎您为TabLayout提交function请求以支持空适配器。