我很高兴谷歌发布了基于RecyclerView的ViewPager2,以解决旧ViewPager的许多问题。
我很快将旧的ViewPager代码替换为ViewPager2:
-
在 xml 中将 ViewPager 替换为 ViewPager2
-
将
FragmentPagerAdapter(FragmentManager)
替换为FragmentStateAdapter(Fragment)
-
查看寻呼机设置如下:
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有什么关系吗?
这可能是ConstraintLayout
或ViewPager2
中的错误。
ViewPager2
的容器原本是一个ConstraintLayout
,在我把它改成LinearLayout
后,它就简单地工作了。
试图在示例项目中重现该问题,但即使我使用了ConstraintLayout
也无法重现......因此,必须有一些其他条件才能实现这一目标。