ViewPager automatically sets the current page

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); } 
+6
source share
2 answers

In your PagerActivity application use

  viewPager = (ViewPager) findViewById(R.id.view_pager); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { int pagei = position + 1; pages=pagei + ""; Toast.makeText(PagerActivity.this, getString(R.string.changeinfopage) + " " + pages, Toast.LENGTH_SHORT).show(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); 

and

  @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_previous: viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); return true; case R.id.action_next: viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); return true; } return super.onOptionsItemSelected(item); } 
+8
source
 viewPager.setCurrentItem(idx); 

where idx is 0 based on an integer.

+4
source

Source: https://habr.com/ru/post/983605/


All Articles