How to disable or enable viewpager swiping in android
What i am trying to do: I am trying to Enable/disable swiping in pager programatically when the program is running
Ex: When on the flow if i check for a condition and if it returns true
enable swiping, and if condition returns false
disable swiping.
Solution i am using is this one
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
} }
Then select this instead of the builtin viewpager in XML
<mypackage.CustomViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
You just need to call the "setPagingEnabled" method with "false" and users won't be able to swipe to paginate.
Problem with above methodology: i cannot set the property on the flow, I:e .... I either can enable swiping or disable swiping. But i cannot do this based on condition
Question:
- Can i achieve my goal in some-other way, if so what is it ?
- Or is this not possible ?
Solution 1:
Best solution for me. -First, you create a class like this:
public class CustomViewPager extends ViewPager {
private Boolean disable = false;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs){
super(context,attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !disable && super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !disable && super.onTouchEvent(event);
}
public void disableScroll(Boolean disable){
//When disable = true not work the scroll and when disble = false work the scroll
this.disable = disable;
}
}
-Then change this in your layout:<android.support.v4.view.ViewPager
for this<com.mypackage.CustomViewPager
-Finally, you can disable it:view_pager.disableScroll(true);
or enable it: view_pager.disableScroll(false);
I hope that this help you :)
Solution 2:
Disable swipe progmatically by-
final View touchView = findViewById(R.id.Pager);
touchView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
and use this to swipe manually
touchView.setCurrentItem(int index);
Solution 3:
In your custom view pager adapter, override those methods in ViewPager
.
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
And to enable, just return each super
method:
super.onInterceptTouchEvent(event)
and super.onTouchEvent(event)
.