欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

TabLayout关联ViewPager后不显示文字的解决方法

程序员文章站 2022-06-19 19:04:39
当使用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);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。