How to disable/ lock one page in viewpager?

一曲冷凌霜 提交于 2020-01-15 03:09:33

问题


I want lock / disable one particular page(fragment) in viewpager. According to scenario for some people only able to access that page. How restrict swiping to that page.

I disabled tab click for Events page by using following code :

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

But now I need to restrict swiping for that page in view pager. How to do this?


回答1:


I written this in pager adapter it works.

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



回答2:


Use this

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

Hope this helped you

You can also use

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



回答3:


This is also the solution without using the deprecated method (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);
        }
    });    


来源:https://stackoverflow.com/questions/37873326/how-to-disable-lock-one-page-in-viewpager

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!