使用选项卡滑动视图:需要修改

时间:2015-10-29 11:47:35

标签: android android-viewpager swipe android-tabs horizontal-scrolling

我已经使用Android官方网站http://developer.android.com/training/implementing-navigation/lateral.html

实现了带选项卡的滑动视图

我想对此代码进行两处修改:

  1. 顶部的标签栏显示三个不同的标签。在左上角;上一个标签,在右上角;下一个标签位于中间;当前/选定的标签。我想隐藏上一个和下一个标签。我希望它只显示当前/选定的标签栏。

  2. 在此代码中,每个选项卡只有一个片段。我希望Tab 2有3个水平排列的片段。我想要的是,如果我从标签上方的顶部向上滑动,我将直接转到下一个/上一个标签。但是如果我在屏幕上滑动,在标签下面,我应该能够在第二个标签之前滑动三次,然后才能到达标签3.详细说明:我需要在每个片段中水平滚动列表视图。

    < / LI>

    这是正确的方向吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有理解你的第一点,但是关于在同一个标​​签下分组几个片段,你可以通过为按下的标签添加你自己的监听器和viewPager swipe来实现它,而不是让视图Pager实现那个逻辑。这是一个例子:

//setup tabs
    mTabLayout = (TabLayout) findViewById(R.id.tabs);
    mTabLayout.addTab(mTabLayout.newTab("Prev"));
    mTabLayout.addTab(mTabLayout.newTab("Current"));
    mTabLayout.addTab(mTabLayout.newTab("Next"));

    //Listen for pressed tabs
    mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            if (mDissableTabListener) {
                return;
            }

            if (tab.getPosition() == 0) {
                //go to first position
                mViewPager.setCurrentItem(0);
            } else if (tab.getPosition() == 1){
               //i.e: go to your first tab at the center
               ,ViewPager.setCurrentItem(1);
            } else if (tab.getPosition() == 2) {
                //go to last position
                if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() -1) {
                    //we are in the last tab, so move to first position
                    mViewPager.setCurrentItem(0);
                }
            }
        }

        ...
    });

    //Now use a OnViewPagerListener to change selected tab when there is a swipe
    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                //avoid the TabSelectedMethod to be called (it would change the viewPager current item)
                mDissableTabListener = true;
            if (position == mViewPager.getAdapter().getCount() -1){
                //When swipe to last 
                mTabLayout.getTabAt(2).select();

            } else if (position == 0){
                //select first tab
                mTabLayout.getTabAt(0).select();

            } else {
                //select center tab
                mTabLayout.getTabAt(1).select();
            }
            mDissableTabListener = false;
        }

        ...
    });