【问题标题】:Swipe Views with Tabs: Modification required使用选项卡滑动视图:需要修改
【发布时间】:2016-01-29 13:03:56
【问题描述】:

我已经实现了Android官网的Swipe Views with Tabs:http://developer.android.com/training/implementing-navigation/lateral.html

我想对这段代码做两处修改:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不明白你的第一点,但是关于在同一个选项卡下分组几个片段,你可以通过为按下的选项卡和 viewPager 滑动添加自己的侦听器来做到这一点,而不是让 view 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;
            }
    
            ...
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多