2

我有 ViewPager2 与 TabLayout 连接。其他引用 ViewPager 的帖子提供覆盖 setCurrentItem(position, false) ,其中 false 禁用平滑滚动。但是,TabLayoutMediator 调用 onTabSelected(TabLayout.Tab tab),后者调用 viewpager.setCurrentItem(postion, true)。如果 TabLayoutMediator 和 ViewPager2 是最终的,我该如何覆盖此行为?

已经尝试过:

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            viewPager.setCurrentItem(position, false);
        }
    });

并像这样覆盖 onTabSelected:

     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(viewPager.getPosition(), false);
        }
         ......
    }
4

1 回答 1

4

这是在1.2.0-alpha05材料发布中添加的,更准确地说是在此 PR:https ://github.com/material-components/material-components-android/pull/951 。

如果您导入上述版本,例如:

implementation "com.google.android.material:material:1.2.0-alpha05"

您可以禁用动画效果:

TabLayoutMediator(tab_layout, view_pager, false, false) { tab, position ->
  ...
}.attach()

的最后两个参数TabLayoutMediator是 forautoRefreshsmoothScroll

希望这可以帮助。

于 2020-04-01T08:29:07.533 回答