Android 如何在viewpager中禁用/锁定一个页面?

Android 如何在viewpager中禁用/锁定一个页面?,android,android-viewpager,Android,Android Viewpager,我想锁定/禁用viewpager中的一个特定页面(片段)。根据场景,有些人只能访问该页面。如何限制浏览该页面 我使用以下代码禁用了“事件”页的“单击”选项卡: LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0)); if(!isAccess){ tabStrip.getChildAt(3).setClickable(false); tabStrip.getChild

我想锁定/禁用viewpager中的一个特定页面(片段)。根据场景,有些人只能访问该页面。如何限制浏览该页面

我使用以下代码禁用了“事件”页的“单击”选项卡:

    LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
if(!isAccess){
            tabStrip.getChildAt(3).setClickable(false);
            tabStrip.getChildAt(3).setEnabled(false);
}
但现在我需要限制浏览页面中的页面。如何做到这一点?

使用这个

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) { }
});

我在寻呼机适配器中写的,它可以工作

@Override
public int getCount() {
  if(!isAccess) {
    return 3;
  } else {
    return 4;
  }
}

这也是不使用不推荐使用的方法(setOnPageChangeListener)的解决方案


初始化第一个制表符位置

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) {

            }
        });
viewPager.addOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
//4是要禁用的选项卡的位置
如果(位置==4){
如果(当前选项卡<4){
//从左向右滑动
viewPager.setCurrentItem(5);
currentTab=5;
}否则{
//从右向左滑动
viewPager.setCurrentItem(3);
currentTab=3;
}
}否则{
currentTab=位置;
}
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
}
});

viewPager.setOnPageChangeListener(新的viewPager.OnPageChangeListener()已取消定位。setSelected具有签名
public void setSelected(已选择布尔值)
,所以用2调用它应该和用false调用它是一样的,对吧?锁定一个选项卡似乎很糟糕。为什么不只创建一个简单的页面,说明事件不可用(或相关消息)当用户滑动到“事件”选项卡时?更好的方法是仅根据用户显示可用选项。即,如果用户有权访问“事件”选项卡,则渲染4个选项卡,否则仅渲染3个选项卡。此代码不起作用,它将返回null:LinearLayout tabStrip=((LinearLayout)tabLayout.getChildAt(0));这不符合OP的要求。如果他实现了此代码,TabStrip中也只会呈现3个选项卡,事件选项卡在屏幕上甚至不可见。OP只想禁用/锁定最后一个选项卡。您的问题似乎与您的答案不匹配。您想禁用/锁定选项卡,但在您的答案中,第四个选项卡将不可见。这是静态解决方案。是的,这就是我想要的。第四个选项卡将根据场景呈现/可见。
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) {

            }
        });