如果滚动位置为 0,ViewPager2 中的片段不会响应点击

Fragments in ViewPager2 does not respond to clicks if scroll position is 0

很高兴Google发布了ViewPager2,它基于RecyclerView构建,解决了旧ViewPager存在的许多问题。

我很快将旧的 ViewPager 代码替换为 ViewPager2:

  1. 将 xml

  2. 中的 ViewPager 替换为 ViewPager2
  3. FragmentPagerAdapter(FragmentManager)替换为FragmentStateAdapter(Fragment)

  4. ViewPager设置如下:

    viewPager.adapter = fragmentAdapter
    
    val mediator = TabLayoutMediator(tabLayout, viewPager, true) { tab, position ->
        tab.text = fragmentAdapter.tabNames[position]
    }
    mediator.attach()
    

没有进行其他更改。

问题

执行上述更改后,我意识到一个问题 -

现在我的 ViewPager 是一个普通的水平分页器,我的 fragmentAdapter 中的每个片段都有一个垂直的 RecyclerView

我观察到,当RecyclerView的滚动位置为0时,我在RecyclerView中的项目无法接收到任何点击或长按事件,但可以滚动。滚动后,可以再次收到点击。*

知道ViewPager2也是一个RecyclerView,是不是和嵌套的RecyclerView有关系?

事实证明这可能是 ConstraintLayoutViewPager2 中的错误。

ViewPager2的容器本来是一个ConstraintLayout,我改成LinearLayout后就可以了

我试图在示例项目中重现该问题,但即使我使用 ConstraintLayout 也无法重现...所以必须有一些其他条件才能实现。