繁体   English   中英

Android支持设计库中的TabLayout中的IndexOutOfBoundsException

[英]IndexOutOfBoundsException in TabLayout in android support design lib

我在所有项目中都使用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 
        }

    }
}

但是在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支持设计库的开发人员。

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

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

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

因此,请勿立即调用setupWithViewPager() 当您最终将PagerAdapter更新为从getCount()返回非零值时,可以调用setupWithViewPager() 第二次及以后,更改PagerAdapter ,在适配器上调用notifyDataSetChanged()之后,调用setTabsFromPagerAdapter()刷新选项卡以使其与PagerAdapter内容对齐。 您可以使用boolean来跟踪是否需要调用setupWithViewPager()setTabsFromPagerAdapter()

当然,欢迎您提出针对TabLayout 的功能请求 ,以支持空适配器。

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

似乎正在跟踪此问题并将其固定在将来的版本中,以寻求修复: https : //code.google.com/p/android/issues/detail?id=180453

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM