1

I've setup my activity layout using ViewPager2, BottomNavigationView and Fragments. In my First fragment in ViewPager2 contains a ImageSlider.

When I scroll the ImageSlider the entire fragment (in ViewPager2) scrolls to 2nd Fragment. Why is this happening ?.

Then I changed to Normal ViewPager instead of ViewPager2 and FragmentPagerAdapter instead of FragmentStateAdapter, the it works perfectly, unfortunately FragmentPagerAdapter is deprecated.?

Layout

 <androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Activity

val adapter = ViewPagerAdapter(this)
viewPager.adapter = adapter
    

ViewPagerAdapter

const val FRAGMENT_COUNT = 4;

class ViewPagerAdapter(activity: FragmentActivity): FragmentStateAdapter(activity){

override fun getItemCount() = FRAGMENT_COUNT

override fun createFragment(position: Int): Fragment {
    return when(position) {
        0 -> HomeFragment()
        1 -> DepartmentFragment()
        2 -> ConnectFragment()
        3 -> SocialFragment()
        else -> HomeFragment()
    }
  }
}
Zain
  • 37,492
  • 7
  • 60
  • 84
Unaisul Hadi
  • 620
  • 1
  • 7
  • 22
  • You could try to disable nested scrolling of the internal `RecyclerView` of the `ViewPager2`.. [Here](https://stackoverflow.com/questions/67749500/how-to-enable-dragging-on-viewpager2-inside-bottomsheetdialogfragment/67865776#67865776) could help in that – Zain Jun 08 '21 at 00:49

1 Answers1

2

Intercepting ViewPager2 touch listener is not possible as we cannot extend it like we do in the ViewPager, due to this viewpager don't allow any nested view to scroll. So you need to write a wrapper view around the viewpager2 which will handle this touch interceptor and allow other views to receive scrolling.

Checkout NestedTabSroller class from the Google ViewPager2 sample. This class will solve your problem

Adeel Javed
  • 372
  • 2
  • 11