TabLayout关联ViewPager后不显示文字

Posted 至浊至愚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TabLayout关联ViewPager后不显示文字相关的知识,希望对你有一定的参考价值。

当使用addTab()方法给tablayout动态添加文字时可能会出现不显示标题文字的问题,而真实情况并不是不显示文字,而是ViewPager又给TabLayout加了许多空的标题,导致之前手动添加的标题被挤到后面,不信你多往后翻一翻是不是就出来了。那么这些空的标题是如何产生的呢,通过分析TabLayout源码很快就查出这个问题,其中有个方法的代码是这样的:

private void populateFromPagerAdapter() 
        removeAllTabs();

        if (mPagerAdapter != null) 
            final int adapterCount = mPagerAdapter.getCount();
            for (int i = 0; i < adapterCount; i++) 
                    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));
                
            
         else 
            removeAllTabs();
        
    

我们注意看这一行:

for (int i = 0; i < adapterCount; i++) 
                addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false);
            

恍然大悟了吧,可以看到在TabLayout里面调用了PageAdapter的方法来添加标题,而添加标题的个数就是在PageAdapter的getCount()方法中设置的,标题的文字是在PageAdapter的getPageTitle()方法中设置。
到此,解决方法就出来了:不要为ViewPager手动使用addTab方法添加标题,而应先创建一个list,将其设置在PageAdapter的getPageTitle方法中,代码如下:

@Override
    public CharSequence getPageTitle(int position) 
        return list_title.get(position);
    

以上是关于TabLayout关联ViewPager后不显示文字的主要内容,如果未能解决你的问题,请参考以下文章

在ViewPager + TabLayout中跳过页面

如何使用 tabLayout 在 ViewPager 中显示片段?

不使用 ViewPager 的 TabLayout

TabLayout+ViewPager 标题不显示问题

android tablayout 与viewpager联动 怎样显示tab标题

TabLayout与ViewPager配合使用踩坑总结