个人资讯网站建设,网站建设侵权,十六局门户网登录,免费合作加工厂背景 假设二级页面是上面图片的布局#xff0c;当进来时TabLayout和ViewPager2绑定完就马上调setCustomItem#xff0c;跳转到最后一个tab页面时#xff0c;会发现tab不滚动#xff0c;手动滑一下ViewPager2时才会滚动tab到正确的位置
原因分析
调用TabLayoutMediator.at…背景 假设二级页面是上面图片的布局当进来时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)
}