問題概述
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方法,這樣就可以了