TabLayout与ViewPager结合时不显示Tab标题

当我们将TabLayout与ViewPager结合时,会出现Tab标题不显示的问题.
mTabLayout.setupWithViewPager(viewPager);
从源码里找答案.先看下方法调用流程
大致流程如图,这里只给出populateFromPagerAdapter()方法源码.
void populateFromPagerAdapter() {
removeAllTabs();

if (mPagerAdapter != null) {
//返回ViewPager设置的PagerAdapter.getCount()
final int adapterCount = mPagerAdapter.getCount();
for (int i = 0; i < adapterCount; i++) {
//重新添加,并通过PagerAdapter.getPageTitle()为tab设置标题
addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false);
}

// Make sure we reflect the currently set ViewPager item
if (mViewPager != null && adapterCount > 0) {
final int curItem = mViewPager.getCurrentItem();
if (curItem != getSelectedTabPosition() && curItem < getTabCount()) {
selectTab(getTabAt(curItem));
}
}
}
}
这个方法的第一步 removeAllTabs();.
/**
* Remove all tabs from the action bar and deselect the current tab.
*/
public void removeAllTabs() {
// Remove all the views
for (int i = mTabStrip.getChildCount() – 1; i >= 0; i–) {
removeTabViewAt(i);
}

for (final Iterator<Tab> i = mTabs.iterator(); i.hasNext();) {
final Tab tab = i.next();
i.remove();
tab.reset();
sTabPool.release(tab);
}

mSelectedTab = null;
}
移除了TabLayout添加的tab.下一步final int adapterCount = mPagerAdapter.getCount();则是返回你设置给ViewPager的PagerAdapter的getCount()返回值.
然后在for循环中 addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), 添加新的tab,并将PagerAdapter.getPageTitle()返回值设置为tab的标题.
因此,当ViewPager与TabLayout结合使用时,不必给TabLayout添加tab,也就是不用调用TabLayout.addTab().

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理