設(shè)計師培訓(xùn) 網(wǎng)站seo資訊
背景
假設(shè)二級頁面是上面圖片的布局,當(dāng)進(jìn)來時TabLayout和ViewPager2綁定完就馬上調(diào)setCustomItem,跳轉(zhuǎn)到最后一個tab頁面時,會發(fā)現(xiàn)tab不滾動,手動滑一下ViewPager2時才會滾動tab到正確的位置
原因分析
- 調(diào)用TabLayoutMediator.attach時,會調(diào)用TabLayout.setScrollPosition
- TabLayout.setScrollPosition就是用來滾動tab的
通過斷點(diǎn)發(fā)現(xiàn)scrollTo傳入了0,造成tab不滾動,而position不為0,所以是scrollXForPosition為0導(dǎo)致的 - calculateScrollXForTab方法是計算tab滾動的距離
通過斷點(diǎn)發(fā)現(xiàn)是因?yàn)閟electedChild.getLeft()和selectedWidth都返回了0,因?yàn)閍bLayout和ViewPager2綁定完就馬上調(diào)setCustomItem,這時候TabLayout還沒有完成布局測量操作,所以tab的位置這些信息還拿不到。
解決方法
post一個Runnable再執(zhí)行setCurrentItem,這時候tab已經(jīng)完成測量,能拿到寬度,左邊距等信息
binding.tabLayout.post {binding.viewPager.setCurrentItem(index, false)
}