子Fragment的Touch Event为何未传递至父ViewPager2?
为何子Fragment的触摸事件未传递至父ViewPager2?
基础触摸事件认知
层级结构说明:Inner view嵌套于Middle view中,Middle view嵌套于Outer View中
在未重写dispatchTouchEvent的情况下,我对触摸事件的传递逻辑理解如下:
- Inner View可优先消费触摸事件
- 若Inner View未消费事件,事件会向上传递至Middle View
- 若Middle View也未消费事件,事件会继续传递至Outer View
ViewPager2场景下的测试
ViewPager2布局说明:ViewPager2带有内边距(蓝色区域),内部嵌套Fragment的根View
我通过OnTouchListener检测触摸事件的传递情况,代码如下:
主Activity中ViewPager2的触摸监听
// 代码位于主Activity内 findViewById<ViewPager2>(R.id.main_viewpager).setOnTouchListener{ v, e -> Log.d("TAG", "ViewPager TouchEvent") false }
Fragment根View的触摸监听
// 代码位于Fragment的onViewCreated方法内 // view为Fragment的根View view.setOnTouchListener{ v, e -> Log.d("TAG", "Fragment TouchEvent") false // 不消费触摸事件 }
测试结果
- 触摸Fragment内部区域时,仅打印日志:
"Fragment TouchEvent"。即便Fragment的根View接收到事件且未消费,事件也没有传递至ViewPager2 - 触摸ViewPager2的内边距区域(蓝色区域)时,正常打印日志:
"ViewPager TouchEvent"
疑问
为何子Fragment的触摸事件未传递至父ViewPager2?
内容的提问来源于stack exchange,提问作者Soumyadip Sharma
相关产品推荐
相关产品推荐

