我有一个viewpager2和扩展FragmentStateAdapter的适配器。我希望用户只需点击选项卡就可以转到另一页。我已禁用此viewpager2的用户输入。但是,当我单击选项卡时,会出现快速滑动页面的动画。但我只想显示新碎片。就像使用FragmentTransaction一样,但使用viewpager2和tablayout。是否有人知道如何做到这一点?
您应该像这样使用addOnTabSelectedListener:
tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabSelected(tab: TabLayout.Tab?) {
tab?.position?.let { viewPager?.setCurrentItem(it, false) }
}
})
你已经使用了
viewPager.isUserInputEnabled = false
注意:setCurrentItem(int item, boolean smoothScroll)
设置当前选定的页面,并进行平滑滚动。如果你将smoothScroll设置为false,则不会看到动画。
TabLayoutMediator
是你需要的。只需将smoothScroll
设置为false即可。
public TabLayoutMediator(
@NonNull TabLayout tabLayout,
@NonNull ViewPager2 viewPager,
boolean autoRefresh,
boolean smoothScroll,
@NonNull TabConfigurationStrategy tabConfigurationStrategy)
https://developer.android.com/reference/com/google/android/material/tabs/TabLayoutMediator
viewpager2.setPageTransformer(null)
可能会给你所需的效果。
注意:设置PageTransformer会禁用数据集更改动画,以防止两个动画系统之间的冲突。设置空转换器将恢复数据集更改动画。