Android更改ViewPager的默认方向滑动

时间:2015-05-07 07:32:22

标签: android android-viewpager

默认情况下ViewPager滑动方向从左到右查看包含内容的其他标签,现在我想将此方向更改为从右到左。

我的FragmentPagerAdapter课程:

public static class MyPagerAdapter extends FragmentPagerAdapter {
    private static int NUM_ITEMS = 3;

    public MyPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    // Returns total number of pages
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    // Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return MainCategoryListFragment.newInstance(2);
            case 1:
                return ChildFragment.newInstance(1);
            case 2:
                return ParentFragment.newInstance(0);
            default:
                return null;
        }
    }

    // Returns the page title for the top indicator
    @Override
    public CharSequence getPageTitle(int position) {
        String title = "";
        switch (position){
            case 0:
                title =  "one";
                break;
            case 1:
                title =  "two";
                break;
            case 2:
                title =  "tree";
                break;
        }
        return title;
    }
}

2 个答案:

答案 0 :(得分:0)

ViewPager.setCurrentItem(int pageIndex,boolean isSmoothScroll);

pageIndex是总页数。通过这样做,用户将被迫从右向左滑动。

答案 1 :(得分:0)

here

的复制粘贴答案
  

我在一个月前遇到了同样的问题,但我觉得我发现了一个很棒的问题   解。

     

1)将您的TabLayout方向更改为xml中的ltr:

<android.support.design.widget.TabLayout
    android:id="@+id/tl_activity_main"
    android:layout_below="@id/toolbar_activity_main"
    android:layoutDirection="ltr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/DisionTabLayout" />
     

2)为ViewPager创建自定义适配器并覆盖方法   getItem(int position)和getPageTitle(int position):

@Override
public Fragment getItem(int position) {
    if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) {
        return mTabs[mTabs.length - position - 1].getFragment();
    } else {
        return mTabs[position].getFragment();
    }
}

@Override
public int getCount() {
    return mTabs.length;
}

@Override
public CharSequence getPageTitle(int position) {
    if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) {
        return mTabs[mTabs.length - position - 1].getTitle();
    } else {
        return mTabs[position].getTitle();
    }
}
     

3)将适配器设置为ViewPager,然后将此ViewPager应用于   TabLayout。

private void setAdapters() {
    // initialize adapter
    mTabsAdapter = new TabsAdapter(getSupportFragmentManager(), mTabs, true);
    // set adapter to ViewPager
    vp.setAdapter(mTabsAdapter);
    // set ViewPager to TabLayout
    tl.setupWithViewPager(vp);
    // if RTL orientation, go to last item
    vp.setCurrentItem(vp.getAdapter().getCount() - 1, false);
}
     

4)我创建了一篇博文,其中包含更多详细信息和完整代码 -   here