将支持库更新到 23.2.0 后 TabLayout 崩溃
TabLayout crashing after updating support library to 23.2.0
我正在使用设计库中的 TabLayout
和 ViewPager
,使用函数 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))
我正在使用设计库中的 TabLayout
和 ViewPager
,使用函数 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))