关于ViewPager与TabLayout组合使用时tab.setIcon()失效分析
谷歌Material Design,提供了一系列常用标准控件,让我们可以在上面自由拓展,降低了我们的使用难度,也将一些开源项目推向末日。今天我们不讨论这些,主要说明在ViewPager与TabLayout组合使用产生的问题,以及本人的解决方案。如图:
当我们setIcon()时,预计情况是应该一张图片和一个文本,实际效果,只显示文本,icon莫名其妙消失。
可能原因:我们给tablayout设置文本加图片,但是在vp的适配器中通过getPageTitle()返回的是一个单纯的字符串,使用setupWithViewPager将vp与lablayout关联起来(setTabsFromPagerAdapter已不推荐使用),后者将前者覆盖掉,是否是这样呢?
我们直接从setupWithViewPager开始去找
这个方法主要分3部分:
1.
如果已经设置过 ViewPager 了,并且也设置了PageChangeListener,则将它移除
2.如果传入了一个空的 ViewPager,就将 ViewPager,r和PagerAdapter都设置为空
3.到这里我们仍然没有发现问题,这时我们看到setPagerAdapter
我们进去看看,一直到这里,removeAllTabs()移除所有tab,然后从getPageTitle获取文本,现在知道原因,恍然大悟。
原因出来了,解决方案. 1,既然你remove,我重新add进去不就可以了?
2.重写TabLayout.
当然,作为一名标准的处女座,在闲下来后,我自己会封装一个TabLayout上传