当我们将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()
.只需要重写PagerAdapter.getPageTitle()
方法即可.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。