两个横向 ViewPager2 嵌套滑动冲突怎么解决?

Moriafly 2020-09-11 08:44:33
问题场景:MainActivity 中用 TabLayout + ViewPager2 做了个横向滑动 Fragment 页面切换的功能。
其中一个 Fragment 中也使用了一个 ViewPager2(横向),用来无限翻其中内容的(类似抖音,不过是横向,竖向效果不好,我这要横向)。
 
示意图

问题:在显示 Fragment1 时候,手指在 Fragment1 中 ViewPager2 滑动,我想要触发这个滑动,然而触发的是 Activity 中的 ViewPager2 滑动。
ViewPager2 是 final 类不能复写。源码中 isUserInputEnabled() 为 True 时候 onInterceptTouchEvent 会拦截。有人给我方法是当 Fragment1 显示时将 Activity 中的 ViewPager2 的 isUserInputEnabled() 设置为 False,但是我需要在 Fragment1 除 ViewPager2 的其他区域又能可以触发 Activity 中 ViewPager2 的滑动。
请问如何解决?
...全文
15866 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
VipPeterGee 2021-03-30
  • 打赏
  • 举报
回复 4
Google给出了解决方案: https://github.com/android/views-widgets-samples/blob/master/ViewPager2/app/src/main/java/androidx/viewpager2/integration/testapp/NestedScrollableHost.kt#L71 只需要在内部的ViewPager2外面包一层NestedScrollableHost即可解决
AndroidGTR 2021-01-24
  • 打赏
  • 举报
回复
兄弟该问题解决了吗?
weixin_38726780 2020-09-16
  • 打赏
  • 举报
回复
云开发的人,还真的不少
mwgzs001 2020-09-15
  • 打赏
  • 举报
回复
这个问题我解决了。 我是这样解决的 ViewPager2是final类不能继承,重写onInterceptTouchEvent,但是换个思路,我将子ViewPager2放在父布局里。 这里我是用的ConstraintLayout,然后继承ConstraintLayout,重写onInterceptTouchEvent。 这样通过点击时计算点击的位置和子ViewPager2的高度,我就可以得出点击的位置是否在子ViewPager2之内。 override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { ev?.let { if (ev.action == MotionEvent.ACTION_DOWN) { onOutsideTouchListener.invoke( ev.y > getChildAt(0).height ) } } return super.onInterceptTouchEvent(ev) } 然后通过传入闭包,就可以获得点击区域了,你可以试试。
「已注销」 2020-09-11
  • 打赏
  • 举报
回复
引用 4 楼 无fucker说 的回复:
[quote=引用 2 楼 Moriafly 的回复:][quote=引用 1 楼 无fucker说的回复:]https://blog.csdn.net/weixin_43917449/article/details/86519726
ViewPager 可以复写,所以可以事件分发来控制,可是 ViewPager2 不行啊。[/quote] 里面都写得很清楚了,在子Viewpager拦截消费,百度viewpager嵌套viewpager一堆[/quote]
「已注销」 2020-09-11
  • 打赏
  • 举报
回复
引用 4 楼 无fucker说 的回复:
[quote=引用 2 楼 Moriafly 的回复:][quote=引用 1 楼 无fucker说的回复:]https://blog.csdn.net/weixin_43917449/article/details/86519726
ViewPager 可以复写,所以可以事件分发来控制,可是 ViewPager2 不行啊。[/quote] 里面都写得很清楚了,在子Viewpager拦截消费,百度viewpager嵌套viewpager一堆[/quote]大哥,是 ViewPager2,22222,第二代,不能重写拦截事件,官网:https://developer.android.google.cn/jetpack/androidx/releases/viewpager2 。不是 ViewPager,ViewPager 我也会啊。
雕·不懒惰 2020-09-11
  • 打赏
  • 举报
回复
引用 2 楼 Moriafly 的回复:
[quote=引用 1 楼 无fucker说的回复:]https://blog.csdn.net/weixin_43917449/article/details/86519726

ViewPager 可以复写,所以可以事件分发来控制,可是 ViewPager2 不行啊。[/quote]
里面都写得很清楚了,在子Viewpager拦截消费,百度viewpager嵌套viewpager一堆
「已注销」 2020-09-11
  • 打赏
  • 举报
回复
引用 1 楼 无fucker说的回复:
https://blog.csdn.net/weixin_43917449/article/details/86519726
ViewPager 可以复写,所以可以事件分发来控制,可是 ViewPager2 不行啊。
雕·不懒惰 2020-09-11
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_43917449/article/details/86519726

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧