Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnTouchListener for ViewPager2

I recently changed the ViewPager in my application to a ViewPager2. I had set an onTouchListener to the viewPager object to detect gestures (onFling and onLongPress), as such:

mViewPager.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        mDetector.onTouchEvent(motionEvent); // use the custom gesture detector to detect onFling and onLongPress touch events.
        return true; 
    }
});

The onTouchListener for the viewPager was working fine before the refactor to the ViewPager2. I tried this answer, but it didn't work.

Anyone has an idea as to why this might be the case and how I could fix it?

like image 761
Jorn Rigter Avatar asked Dec 23 '22 18:12

Jorn Rigter


1 Answers

Because ViewPager2 is a ViewGroup, the final target is the recyclerview in it. The setOnTouchListener is not called because the recyclerview intercepts the event and calls the onTouchEvent first.

The right way to add customised onTouch logic is to call

mViewPager.getChildAt(0).setOnTouchListener{...}
like image 86
geek919 Avatar answered Jan 05 '23 04:01

geek919