升级支持库到23.2.0后,TabLayout崩溃问题

7

我正在使用设计库中的TabLayoutViewPager,通过setupWithViewPager函数将它们链接起来。在选项卡内容被更改后重新创建选项卡的情况下,应用程序会崩溃。以下是崩溃跟踪:

java.lang.IllegalArgumentException: Tab belongs to a different TabLayout.
at android.support.design.widget.TabLayout.addTab(TabLayout.java:433)
at android.support.design.widget.TabLayout.populateFromPagerAdapter(TabLayout.java:772)
at android.support.design.widget.TabLayout.setPagerAdapter(TabLayout.java:763)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:715)

更新至支持库23.2.0后,程序崩溃了,在v23.1.1中没有出现过这种情况。
4个回答

7

2

1

我遇到了同样的问题,后来发现新版的 TabLayout 使用一个池来缓存选项卡。在 23.1.1 版本中。

public Tab newTab() {
    return new Tab(this);
}

并且在23.2.0中

public Tab newTab() {
    Tab tab = sTabPool.acquire();
    if (tab == null) {
        tab = new Tab(this);
    }
    tab.mView = createTabView(tab);
    return tab;
}

所以,如果你使用newTab()创建一个选项卡,并且由于某种原因没有将其添加到TableLayout中。下次进入另一个带有TabLayout的活动时,就会发生这种情况。

0

我仍然可以在支持库版本25.3.1中看到这个问题。为了避免崩溃,我删除了所有选项卡(removedAllTabs()),并创建了一个新的选项卡实例,再将其添加到Tablayout中。

 gauge_tab.removeAllTabs()
 gauge_tab.addTab(gauge_tab.newTab().setText(R.string.flash_gauge_04))
 gauge_tab.addTab(gauge_tab.newTab().setText(R.string.flash_gauge_06))
 gauge_tab.addTab(gauge_tab.newTab().setText(R.string.flash_gauge_08))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接