【问题标题】: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
我想对这段代码做两处修改:
顶部的选项卡栏显示三个不同的选项卡。在左上角;上一个标签,在右上角;下一个标签和顶部中间;当前/选定的选项卡。我想隐藏上一个和下一个选项卡。我希望它只显示当前/选定的标签栏。
-
在此代码中,每个选项卡只有一个片段。我希望 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;
}
...
});