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

Jetpack Compose中Card用Modifier.pointerInput添加长按无响应如何解决

问题原因

手势消费冲突导致自定义检测不生效:Card自带的onClick参数本质是内部封装了优先级更高的clickable修饰符,你手动添加的pointerInput手势检测会被它提前消费触摸事件,所以无法触发回调。你的用法没有问题,只需要停用自带的onClick配置,所有交互逻辑统一通过手势检测实现即可,不需要重写Card的任何样式。

方案1:使用combinedClickable(更推荐)

这是官方提供的组合点击修饰符,同时支持普通点击、长按、双击配置,默认自带点击水波纹效果,不需要手动处理手势检测:

Card(
    // 不要配置Card构造参数里的onClick!
    modifier = Modifier
        .combinedClickable(
            onClick = {
                // 普通点击逻辑
                clickable()
            },
            onLongClick = {
                // 长按逻辑
                longClickable()
            }
        )
) {
    // 你的Card内容布局
}
方案2:使用pointerInput的detectTapGestures

你原来的代码用错了回调,普通点击应该用onTap而不是onPress,onPress会在手指按下时立刻触发,不符合普通点击的交互逻辑:

Card(
    // 不要配置Card构造参数里的onClick!
    modifier = Modifier
        .pointerInput(Unit) {
            detectTapGestures(
                onTap = {
                    // 普通点击逻辑
                    clickable()
                },
                onLongPress = {
                    // 长按逻辑
                    longClickable()
                }
            )
        }
) {
    // 你的Card内容布局
}

如果需要保留点击水波纹效果,可以额外给Modifier添加indication和interactionSource配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:09:01