背景
假設二級頁面是上面圖片的布局,當進來時TabLayout和ViewPager2綁定完就馬上調setCustomItem,跳轉到最后一個tab頁面時,會發現tab不滾動,手動滑一下ViewPager2時才會滾動tab到正確的位置
原因分析
- 調用TabLayoutMediator.attach時,會調用TabLayout.setScrollPosition
- TabLayout.setScrollPosition就是用來滾動tab的
通過斷點發現scrollTo傳入了0,造成tab不滾動,而position不為0,所以是scrollXForPosition為0導致的 - calculateScrollXForTab方法是計算tab滾動的距離
通過斷點發現是因為selectedChild.getLeft()和selectedWidth都返回了0,因為abLayout和ViewPager2綁定完就馬上調setCustomItem,這時候TabLayout還沒有完成布局測量操作,所以tab的位置這些信息還拿不到。
解決方法
post一個Runnable再執行setCurrentItem,這時候tab已經完成測量,能拿到寬度,左邊距等信息
binding.tabLayout.post {binding.viewPager.setCurrentItem(index, false)
}