You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:40:05