Android ViewPager2 - how to detect user initiated page change

Viewed 1866

I have the ViewPager2 callback setup but need to detect when a user initiated page change has completed. The callback won't differentiate between user initiated and code initiated. Here's what I have now:

ViewPager2.OnPageChangeCallback swipeListener = new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            //I want to run code only if user initiated this page change
            //but this runs whether user initiated or code initiated
        }
}

The page change that is done via code:

viewPager.setCurrentItem(targetSlide);

The docs for ViewPager2 show a isUserInputEnabled() method which tells you if a user "can" change the page manually, but I need to detect if the user "did" initiate the page change.

2 Answers

You can use isFakeDragging inside registerOnPageChangeCallback to detect whether the drag is fake or initiated by user.

Returns true if a fake drag is in progress.

...onPageScrolledonPageScrolled(int position, float positionOffset, int positionOffsetPixels){
    if(isFakeDragging)
        {// fake scroll}
    else{// user scroll}
}

One can override viewpager2 to detect a page change like so:

    viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
        }
    });
Related