8

我很高兴 Google 发布了基于 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()
    

没有进行其他更改。

问题

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

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

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

ViewPager2也知道这RecyclerView与嵌套的 RecyclerView 有关吗?

4

1 回答 1

9

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

的容器ViewPager2最初是一个ConstraintLayout,在我将其更改为 之后LinearLayout,它就可以正常工作了。

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

于 2019-06-14T04:43:50.603 回答