TabLayout关联ViewPager后不显示文字的解决方法
程序员文章站
2023-11-17 19:17:40
当使用addtab()方法给tablayout动态添加文字时可能会出现不显示标题文字的问题,而真实情况并不是不显示文字,而是viewpager又给tablayout加了许多...
当使用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); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。