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方法,这样就可以了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM