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

Android 使用选项卡滑动视图:需要修改,android,android-viewpager,swipe,android-tabs,horizontal-scrolling,Android,Android Viewpager,Swipe,Android Tabs,Horizontal Scrolling,我已经在Android官方网站上实现了带标签的滑动视图: 我想对此代码进行两个修改: 顶部的选项卡栏显示三个不同的选项卡。在左上角;右上角的上一个选项卡;下一个选项卡和顶部中间;当前/选定选项卡。我想隐藏上一个和下一个选项卡。我希望它只显示当前/选定的选项卡栏 在这段代码中,每个选项卡只有一个片段。我希望选项卡2有3个水平排列的片段。我想要的是,如果我从选项卡顶部滑动,我将直接转到下一个/上一个选项卡。但是如果我在屏幕上的标签下方滑动,我应该能够在到达标签3之前滑动三次标签2。详细说明:我需要在

我已经在Android官方网站上实现了带标签的滑动视图:

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

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

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


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

    我不理解您的第一点,但关于将多个片段分组到同一个选项卡下,您可以通过为按下的选项卡和浏览页面滑动添加自己的侦听器来实现,而不是让浏览页面执行该逻辑。以下是一个例子:

    //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;
            }
    
            ...
        });