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



我很高兴谷歌发布了基于RecyclerView的ViewPager2,以解决旧ViewPager的许多问题。

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

  1. 在 xml 中将 ViewPager 替换为 ViewPager2

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

  3. 查看寻呼机设置如下:

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

未进行其他更改。

问题所在

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

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

我观察到,当回收器视图的滚动位置为 0 时,我在该回收器视图中的项目无法接收任何点击或长按事件,但可以滚动。滚动后,它可以再次获得点击。

知道ViewPager2也是一个RecyclerView,与嵌套的RecyclerView有什么关系吗?

事实证明,

这可能是ConstraintLayoutViewPager2中的错误。

ViewPager2的容器原本是一个ConstraintLayout,在我把它改成LinearLayout后,它就简单地工作了。

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

最新更新