【问题标题】:Skip pages in ViewPager + TabLayout在 ViewPager + TabLayout 中跳过页面
【发布时间】:2016-05-16 06:48:02
【问题描述】:

我知道这个问题已经被问过不止一次了,但我想我正在寻找一种不同的“跳过”。

在与TabLayout 链接的ViewPager 中:

ViewPager vp = (ViewPager) findViewById(...);
TabLayout tl = (TabLayout) findViewById(...);
vp.setAdapter(new NoSwipePagerAdapter());
tl.setupWithViewPager(vp);

由于 viewpager 不可滚动,预期的行为将是:如果点击“A”选项卡,viewpager 将滚动到该选项卡。

我的问题是,如果我在“A”上并点击“D”,则查看器会通过 B 和 C 进行动画处理。我想要做的是从字面上“跳过”B 和 C 并显示 D。

主要是出于性能问题,因为 B 和 C 是重碎片,但也出于设计问题。

我已经尝试了setCurrentItem(int index, boolean smoothScroll) 的所有组合,但都不起作用。

是否可以跳过 ViewPager 页面?提前致谢。

【问题讨论】:

    标签: android android-fragments android-viewpager android-tablayout


    【解决方案1】:

    如果你想跳过两个片段,直接转到第四个片段,那么写下一行

    ViewPager.setCurrentItem(3);
    

    【讨论】:

    • 正如我所说,这对我不起作用。 ViewPager 在动画时仍然显示其他片段。
    • viewpager在创建时会得到预定义的fragment流,因此viewpager不能直接从A到D的fragment跳转,但是会很快通过中间的fragment
    • 我已经接受了这个答案,因为似乎没有直接的方法来实现我正在寻找的东西。最终我会尝试在未来实现一个自定义适配器
    • 这是不对的。这在引擎盖下使用smoothScroll true(除非第一个布局),您需要使用setCurrentItem(index, false) stackoverflow.com/questions/14684913/…
    • @hmac 但是我们完全失去了动画,这不是 OP 想要的。
    【解决方案2】:

    我认为,您应该像下面这样创建 PagerAdapter

    public class PagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;
    
    public PagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }
    
    @Override
    public Fragment getItem(int position) {
    
        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new Fragment_PatientList();
    
                break;
            case 1:
                fragment = new FragmentB();
                break;
            case 2:
                fragment = new FragmentC();
                break;
            default:
                return null;
        }
        return fragment;
    }
    
    @Override
    public int getCount() {
        return mNumOfTabs;
    }
    
    }
    

    创建 pagerAdapter 后,设置 viewPager.setAdapter(adapter) 最后,您可以像这样将 tablayout 与您的 viewpager 连接起来

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

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多