5

我正在使用 ViewPagerIndicator 库中的 TabPageIndicator 和 ViewPager 来显示 6 个片段。假设我在第一页,如果我点击第 6 个选项卡,我会看到我所有的页面都滚动了。是否可以禁用此动画?也许我可以在 ViewPager 中以某种方式禁用它?

这是适配器的代码:

public class TabBarFragmentPagerAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
private final List<Fragment> items;
private static final String[] TITLES = new String[] { "Home", "Profile", "Explore", "Contacts", "Beacon" };
private static final int[] ICONS = new int[] {
        R.drawable.icon_tabbar_home_bg,
        R.drawable.icon_tabbar_profile_bg,
        R.drawable.icon_tabbar_explore_bg,
        R.drawable.icon_tabbar_contacts_bg,
        R.drawable.icon_tabbar_beacon_bg
};

public TabBarFragmentPagerAdapter(FragmentManager fm, List<Fragment> items) {
    super(fm);
    this.items = items;
}

@Override
public Fragment getItem(int position) {
    return items.get(position);
}

@Override
public int getIconResId(int index) {
    return ICONS[index];
}

@Override
public CharSequence getPageTitle(int position) {
    return TITLES[position];
}

@Override
public int getCount() {
    return items.size();
}
}
4

3 回答 3

18

另一种选择是覆盖类setCurrentItem(int i)中的CustomViewPager子类ViewPager,如下所示:

@Override
public void setCurrentItem(int item) {
    super.setCurrentItem(item,false);
}
于 2013-06-07T16:47:01.633 回答
4

我调查了 TabPageIndicator 的代码,发现现在不可能。参见 mTab​​ClickListener 的代码:

private final OnClickListener mTabClickListener = new OnClickListener() {
    public void onClick(View view) {
        TabView tabView = (TabView)view;
        final int oldSelected = mViewPager.getCurrentItem();
        final int newSelected = tabView.getIndex();
        mViewPager.setCurrentItem(newSelected);
        if (oldSelected == newSelected && mTabReselectedListener != null) {
            mTabReselectedListener.onTabReselected(newSelected);
        }
    }
};

为了支持这个特性,我们应该向 setCurrentItem 添加第二个参数。像这样的东西:

mViewPager.setCurrentItem(newSelected, smoothScrollEnabled);
于 2013-04-18T09:20:09.540 回答
1

您现在可以使用 Material 库和 viewPager2 中的 TabLayout 以及这段代码来同步它们并禁用平滑滚动:

TabLayoutMediator(tabLayout, pager, false, false) { tab, position ->
                when(position) {
                    0 -> tab.text = "text 1"
                    1 -> tab.text = "text 2"
                    2 -> tab.text = "text 3"
                }
            }.attach()

设置为 false 的第二个布尔参数是smoothScroll参数

更多信息和官方文档: https ://material.io/develop/android/components/tabs

于 2020-10-05T22:32:35.747 回答