如果滚动位置为0,则ViewPager2中的片段不会响应单击 [英] Fragments in ViewPager2 does not respond to clicks if scroll position is 0
问题描述
我很高兴Google发布了基于RecyclerView构建的 ViewPager2 解决了旧版ViewPager遇到的许多问题.
I am very glad that Google released ViewPager2 which is built on RecyclerView to solve a lot of issues that the old ViewPager has.
我很快将旧的ViewPager代码替换为ViewPager2:
I quickly replaced my old ViewPager codes to ViewPager2:
-
用xml中的ViewPager2替换ViewPager
Replace ViewPager with ViewPager2 in xml
将FragmentPagerAdapter(FragmentManager)
替换为FragmentStateAdapter(Fragment)
ViewPager的设置如下:
ViewPager setup is as below:
viewPager.adapter = fragmentAdapter
val mediator = TabLayoutMediator(tabLayout, viewPager, true) { tab, position ->
tab.text = fragmentAdapter.tabNames[position]
}
mediator.attach()
没有其他更改.
执行上述更改后,我意识到了一个问题-
After performing the above change, I realized a problem -
现在,我的ViewPager是普通的水平寻呼机,我的fragmentAdapter
中的每个片段都有一个垂直的RecyclerView
.
Now my ViewPager is an ordinary horizontal pager, and each fragment in my fragmentAdapter
has a vertical RecyclerView
.
我观察到,无论何时RecyclerView的滚动位置为0,RecyclerView中的项目都不会收到任何单击或长按事件,但可以滚动.滚动后,它可以再次获得点击.*
知道ViewPager2
也是RecyclerView
,嵌套的RecyclerView有什么关系吗?
Knowing that ViewPager2
is a RecyclerView
as well, is there something to do with nested RecyclerView?
推荐答案
事实证明,这可能是ConstraintLayout
或ViewPager2
中的错误.
It turns out it's probably a bug in either ConstraintLayout
or ViewPager2
.
ViewPager2
的容器最初是一个ConstraintLayout
,在我将其更改为LinearLayout
之后,它就可以正常工作.
The container of ViewPager2
was originally a ConstraintLayout
, and after I changed it to LinearLayout
, it simply worked.
我试图在一个示例项目中重现该问题,但是即使使用ConstraintLayout
,也无法重现此问题.因此,必须有其他条件才能实现此目的.
I tried to reproduce the issue in a sample project but I can't reproduce even if I used ConstraintLayout
... So there must be some other conditions to make that happen.
这篇关于如果滚动位置为0,则ViewPager2中的片段不会响应单击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!