Unaisul Hadi
Unaisul Hadi

Reputation: 678

ViewPager2 with FragmentStateAdapter nested scrolling issue

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()
    }
  }
}

Upvotes: 1

Views: 1435

Answers (1)

Adeel Javed
Adeel Javed

Reputation: 372

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

Upvotes: 2

Related Questions