【发布时间】:2015-08-06 17:36:01
【问题描述】:
我在所有项目中都使用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)
经过一番调试,发现这个方法有问题:
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
}
}
}
但在之前的 22.2.0 版本的 lib 中,一切正常:
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 支持设计库的开发人员。
【问题讨论】:
-
据我所见,我觉得
viewPager.getCurrentItem()不是零索引 方法,getTabAt()期望它是。检查API,试试this.getTabAt(viewPager.getCurrentItem() - 1).select(); -
@SudhansuChoudhary:
getCurrentItem()onViewPager是从零开始的。
标签: java android android-support-design