将支持库更新到 23.2.0 后 TabLayout 崩溃

TabLayout crashing after updating support library to 23.2.0

我正在使用设计库中的 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 才重现。

刚刚发现这是 Support library v23.2.0 中的内部错误,注册于:https://code.google.com/p/android/issues/detail?id=201827

我遇到了同样的问题,然后我找到了更新的TabLayout使用一个池来缓存Tab。 在 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 输入另一个 activity 时,就会发生这种情况。

这是 在 google https://code.google.com/p/android/issues/detail?id=201827

上报告的错误

但在 Android 支持库发布后,revision 23.2.1(2016 年 3 月)现在已修复。

只需将支持库更新为 Android Support Library to 23.2.1

我仍然可以在支持库版本:25.3.1 中看到此问题。因此,为了避免崩溃,删除了 AllTabs() 并再次为选项卡创建了一个新实例并添加到 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))