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

LazyRow滚动时跨组件点击事件未注册问题及解决方案咨询

问题分析与解决:LazyRow滚动时子项点击事件失效

问题原因

这是Jetpack Compose嵌套滚动的触摸事件拦截机制导致的:

  • 滚动LazyRow B时,它会优先消费触摸事件用于滚动操作,此时触摸事件不会向下传递到LazyRow A的子项组件。
  • Button能正常响应是因为它不属于任何滚动容器,触摸事件不会被滚动组件拦截,且Button的点击事件优先级更高。

解决方案

方法一:允许滚动容器传递非滚动触摸事件

给LazyRow B添加nestedScroll修饰符,让它在识别到非滚动的触摸操作时,将事件传递给下层组件:

// Lazy Row B
LazyRow(modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())) {
    items(10) {
        Box(modifier = Modifier.size(50.dp))
    }
}

rememberNestedScrollInteropConnection()会建立嵌套滚动的交互连接,确保非滚动触摸事件能正常传递到下层可点击组件。

方法二:自定义触摸事件处理(可选)

如果需要更精细的控制,可以给LazyRow A的子项使用pointerInput替代clickable,手动处理触摸事件:

Box(modifier = Modifier.size(50.dp).pointerInput(Unit) {
    detectTapGestures {
        // 点击事件逻辑
    }
})

这种方式可以绕过默认的滚动拦截逻辑,直接监听触摸点击,但复杂度更高,推荐优先使用方法一。

内容的提问来源于stack exchange,提问作者user5102612

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:21:31