如果滚动位置为0,则ViewPager2中的片段不会响应单击 [英] Fragments in ViewPager2 does not respond to clicks if scroll position is 0

本文介绍了如果滚动位置为0,则ViewPager2中的片段不会响应单击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很高兴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:

  1. 用xml中的ViewPager2替换ViewPager

  1. 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?

推荐答案

事实证明,这可能是ConstraintLayoutViewPager2中的错误.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆