我希望在viewpager中锁定/禁用一个特定页面(片段)。根据场景,有些人只能访问该页面。如何限制滑动到该页面。
我通过使用以下代码禁用了“事件”页面的选项卡:
LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
if(!isAccess){
tabStrip.getChildAt(3).setClickable(false);
tabStrip.getChildAt(3).setEnabled(false);
}
但现在我需要在视图寻呼机中限制对该页面的滑动。怎么做?
答案 0 :(得分:3)
使用此
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
if (position == 3)
{
// show dialog that you are not allowed
viewPager.setSelected(2);
}
}
});
希望这有助于你
您也可以使用
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
// optional
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
// optional
@Override
public void onPageSelected(int position) { }
// optional
@Override
public void onPageScrollStateChanged(int state) { }
});
答案 1 :(得分:3)
我在寻呼机适配器中写了这个。
@Override
public int getCount() {
if(!isAccess) {
return 3;
} else {
return 4;
}
}
答案 2 :(得分:0)
这也是不使用不推荐使用的方法(setOnPageChangeListener)的解决方案。
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
if(position == 3) {
//To disable specific tab and set the previuos tab
viewPager.setCurrentItem(2); //We cannot provide the position in setSelected(boolean) now. This was missed in above solution
}
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});
答案 3 :(得分:0)
初始化第一个标签页位置
int currentTab = 0;
然后使监听器成为viewPager
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//4 is the position of the tab we want to disable
if (position == 4) {
if (currentTab < 4) {
// swipe from left to right
viewPager.setCurrentItem(5);
currentTab = 5;
} else {
// swipe from right to left
viewPager.setCurrentItem(3);
currentTab = 3;
}
} else {
currentTab = position;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});