【问题标题】:Fragments in ViewPager2 does not respond to clicks if scroll position is 0如果滚动位置为 0,ViewPager2 中的片段不响应点击
【发布时间】:2019-06-14 01:30:23
【问题描述】:

很高兴 Google 发布了ViewPager2,它基于 RecyclerView 解决了旧 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 有什么关系吗?

【问题讨论】:

    标签: android android-recyclerview android-viewpager android-touch-event android-viewpager2


    【解决方案1】:

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

    ViewPager2的容器原来是ConstraintLayout,我改成LinearLayout后,就简单了。

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

    【讨论】:

    • 是的,我将 ConstraintLayout 更改为 FrameLayout 并开始工作。绝对是 ConstraintLayout 的一些错误
    • 谢谢。我已经被困在这几个小时了。
    • 非常感谢.. 我也被困在这几个小时_/_
    • 我遇到了同样的问题,我将容器更改为线性布局并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2020-10-07
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多