TabLayout和ViewPager联动时的问题及解决方案

问题概述

TabLayout搭配ViewPager关联使用时,在未调用TabLayout的setupWithViewPager(mViewPager)方法之前,ViewPager的内容和TabLayout的title都显示正常,但是两个控件还没有关联,无法联动。

但是一旦调用setupWithViewPager(mViewPager)方法联动,虽然关联成功了,ViewPager的内容也显示正常,下方的指示条也还在,但是Tablayout的Tile就显示为空白,没有文字或图标了。

问题原因

通过查询源码,发现TabLaout在调用setupWithViewPager(mViewPager);方法时,etupWithViewPager(mViewPager);会通过一个setPagerAdapter方法调用populateFromPagerAdapter()去关联ViewPager和tablayout,但是在populateFromPagerAdapter()执行关联之前,populateFromPagerAdapter()会执行removeAllTabs();移除所有的tab,然后再把ViewPager的title设置为Tablayout的title,所以如果我们写Tablayout的时候是对Tablayout的title单独设置的,那么单独设置的title就会在setupWithViewPager(mViewPager)方法时被移除掉.

问题解决

因为在populateFromPagerAdapter()执行关联时,它会把ViewPager的title设置为Tablayout的title,所以我们只要通过ViewPager的title来设置Tablayout的title就可以了,ViewPager的title可以在ViewPager的Adapter里重写Adapter的getPageTitle方法,这样就可以了

上一篇:mysql-Innodb事务隔离级别-repeatable read详解1


下一篇:《JavaScript核心概念》基础部分重点摘录