android支持设计lib中的TabLayout中的IndexOutOfBoundsException

And*_*rew 8 java android android-support-design

我在所有项目中使用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)
Run Code Online (Sandbox Code Playgroud)

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

 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 
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

但在之前的lib.2.2.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));
    }
}
Run Code Online (Sandbox Code Playgroud)

谁做了,谁可以受到惩罚呢?

请帮我找到Android支持设计库的开发人员.

小智 2

我很想对此发表评论,但我没有声誉。

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