问题
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