【问题标题】:ViewPager2 with FragmentStateAdapter nested scrolling issue带有 FragmentStateAdapter 嵌套滚动问题的 ViewPager2
【发布时间】:2020-08-30 10:37:12
【问题描述】:

我已经使用ViewPager2BottomNavigationView 和 Fragments 设置了我的活动布局。在我ViewPager2 的第一个片段中包含一个ImageSlider

当我滚动 ImageSlider 时,整个片段(ViewPager2)滚动到第二个片段。为什么会这样?。

然后我改为普通ViewPager 而不是ViewPager2FragmentPagerAdapter 而不是FragmentStateAdapter,它工作得很好,不幸的是FragmentPagerAdapter 已弃用。?

布局

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

活动

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

【问题讨论】:

  • 您可以尝试禁用ViewPager2 的内部RecyclerView 的嵌套滚动。Here 可能会有所帮助

标签: android android-fragments fragmentstatepageradapter android-viewpager2 fragmentstateadapter


【解决方案1】:

拦截 ViewPager2 触摸监听器是不可能的,因为我们不能像在 ViewPager 中那样扩展它,因为这个 viewpager 不允许任何嵌套视图滚动。因此,您需要在 viewpager2 周围编写一个包装视图,该视图将处理此触摸拦截器并允许其他视图接收滚动。

从 Google ViewPager2 示例中检出 NestedTabSroller 类。这堂课会解决你的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2020-11-02
    • 2020-08-11
    • 2018-09-14
    • 2020-04-16
    相关资源
    最近更新 更多