android支持设计库中TabLayout中的IndexOutOfBoundsException



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

com.android.support:设计: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

相关内容

  • 没有找到相关文章

最新更新