У меня есть viewPager, который пролистывает 5 или более страниц. Некоторые страницы содержат поля ввода формы. В зависимости от введенного значения прокрутка может быть включена или отключена. Например: если на странице есть чекбокс, и это обязательное поле, которое нужно отметить. Если этот флажок установлен, смахивание должно работать, в противном случае оно останется на той же странице.
Вы можете расширить класс viewpager, чтобы создать собственную реализацию viewpager. В этом классе вам нужно переопределить метод canScrollHorizontally в соответствии с вашими потребностями, чтобы вернуть true или false.
public class LockableViewPager extends ViewPager {
private boolean swipeLocked;
public LockableViewPager(Context context) {
super(context);
}
public LockableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public boolean getSwipeLocked() {
return swipeLocked;
}
public void setSwipeLocked(boolean swipeLocked) {
this.swipeLocked = swipeLocked;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !swipeLocked && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !swipeLocked && super.onInterceptTouchEvent(event);
}
@Override
public boolean canScrollHorizontally(int direction) {
//control this method based on your logic
return !swipeLocked && super.canScrollHorizontally(direction);
}
}
Не могли бы вы привести пример вызова этого метода в действии?