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

8次阅读

共计 1298 个字符,预计需要花费 4 分钟才能阅读完成。

当我们将 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().

正文完
 0