TabLayout自定義Tab第一次全部高亮

我使用Design包下面的TabLayout布局的前提下,我通過自定義Tab的CustomView來實現(xiàn)定制化需求,這個時候問題來了


如果按照下面的代碼來寫

//這三句用來初始化Tab

TabLayout.Tab newTab =mBinding.layoutTab.newTab();

TabLayout.Tab hotTab =mBinding.layoutTab.newTab();

TabLayout.Tab distanceTab =mBinding.layoutTab.newTab();

//這三句用來設(shè)置自定義的View

newTab.setCustomView(tabView("最新"));

hotTab.setCustomView(tabView("最熱"));

distanceTab.setCustomView(tabView("距離"));

//給TabLayout增加一個監(jiān)聽

mBinding.layoutTab.addOnTabSelectedListener(newTabLayout.ViewPagerOnTabSelectedListener(mBinding.viewPager));

//將三個Tab加入TabLayout

mBinding.layoutTab.addTab(newTab);

mBinding.layoutTab.addTab(hotTab);

mBinding.layoutTab.addTab(distanceTab);

當(dāng)程序運行時第一次進入頁面會出現(xiàn)這個畫面

會發(fā)現(xiàn)所有Tab都是選中狀態(tài)

如果將程序稍作修改,僅僅是調(diào)換一下調(diào)用順序

//將三個Tab加入TabLayout

mBinding.layoutTab.addTab(newTab);

mBinding.layoutTab.addTab(hotTab);

mBinding.layoutTab.addTab(distanceTab);

//這三句用放到addTab調(diào)用之后

newTab.setCustomView(tabView("最新"));

hotTab.setCustomView(tabView("最熱"));

distanceTab.setCustomView(tabView("距離"));

當(dāng)程序運行時會出現(xiàn)這個畫面

正常了,第一個為選中狀態(tài)

然后翻看TabLayout的源碼發(fā)現(xiàn)了問題所在,下圖是setCustomView的具體實現(xiàn)

final boolean isSelected = (mParent.getSelectedTabPosition() == getPosition());

這句話是關(guān)鍵,當(dāng)我想當(dāng)然的以為這個值在初始化肯定為false的時候,確驚奇的發(fā)現(xiàn)為true。

原來在TabLayout沒有addTab的時候,mParent.getSelectedTabPosition()返回了-1,而getPosition()
也返回了-1,所以導(dǎo)致了這個值返回為true,最終導(dǎo)致了錯誤的結(jié)果。具體的細節(jié)可以自行查看TabLayout源碼。閱讀源碼是提高自身的不二途徑。

最后我的Support包的版本是24.0.0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容