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

Sir*_*Lam 7 android android-viewpager android-recyclerview android-touch-event android-viewpager2

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

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

  1. 用 xml 中的 ViewPager2 替换 ViewPager

  2. 替换FragmentPagerAdapter(FragmentManager)FragmentStateAdapter(Fragment)

  3. ViewPager 设置如下:

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

没有进行其他更改。

问题

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

现在我的 ViewPager 是一个普通的水平寻呼机,我的每个片段fragmentAdapter都有一个垂直的RecyclerView.

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

知道这ViewPager2也是一个RecyclerView,是否与嵌套的 RecyclerView 有关系?

Sir*_*Lam 8

事实证明,这可能是ConstraintLayout或 中的一个错误ViewPager2

的容器ViewPager2原本是 a ConstraintLayout,我把它改成 后LinearLayout,它就可以正常工作了。

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