I wrote a custom ViewPager to disable Swipe Scroll , but I want to scroll programmatically. I have three Tab in my view player, but when I call viewPager.setCurrentItem(viewPager.getCurrentItem()+1) in the first Fragment , it moves to the third Fragment instead of the second Fragment . And if I call the same function in the second Fragment , it will be the third. If I call (viewPager.getCurrentItem () - 1) `in the third snippet, it works fine, moving backward. Any help would be greatly appreciated. My code is below:
NonSwipeAbleViewPager
public class NonSwipeableViewPager extends ViewPager { private boolean swipeable; public NonSwipeableViewPager(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager); try { swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true); } finally { a.recycle(); } } @Override public boolean onInterceptTouchEvent(MotionEvent event) { return swipeable ? super.onInterceptTouchEvent(event) : false; } @Override public boolean onTouchEvent(MotionEvent event) { return swipeable ? super.onTouchEvent(event) : false; } }
XML declaration
<co.example.customview.NonSwipeableViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" app:swipeable="false" />
Call
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuNext: NonSwipeableViewPager pages = (NonSwipeableViewPager) getActivity().findViewById(R.id.pager); pages.setCurrentItem(pages.getCurrentItem()+1, true); break; default: return super.onOptionsItemSelected(item); } return super.onOptionsItemSelected(item); }
source share