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

时间:2016-06-17 04:47:23

标签: android android-viewpager

我希望在viewpager中锁定/禁用一个特定页面(片段)。根据场景,有些人只能访问该页面。如何限制滑动到该页面。

enter image description here

我通过使用以下代码禁用了“事件”页面的选项卡:

    LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
if(!isAccess){
            tabStrip.getChildAt(3).setClickable(false);
            tabStrip.getChildAt(3).setEnabled(false);
}

但现在我需要在视图寻呼机中限制对该页面的滑动。怎么做?

4 个答案:

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

            }
        });