Changing viewPager swipe direction

后端 未结 4 820
醉话见心
醉话见心 2020-12-29 12:47

I\'m using TabLayout and viewPager with an option to swipe the viewPager to the left or right in order to navigate between pages.

My problem is, that my application

4条回答
  •  悲&欢浪女
    2020-12-29 13:42

    I faced the same problem month ago but I think I found a great solution. 1) Change your TabLayout direction to ltr in xml:

    
    

    2) Create custom adapter for ViewPager and override methods getItem(int position) and 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) Set the adapter to ViewPager and then apply this ViewPager to 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) I created a blog post which contains more details and full code - here

提交回复
热议问题