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

Jetpack Compose中为LazyColumn内Card添加长按事件失败求助

Jetpack Compose Card添加长按事件的解决方案

我在LazyColumn中使用Card组件,已通过clickable修饰符实现单击跳转功能,但尝试添加长按事件时使用.longclick{}提示「未解析的引用」,已导入androidx.compose.foundation.gestures.*,求解决方法。

原代码:

Card(colors = CardDefaults.cardColors(
            containerColor = Color(0xFF7DCEA0), Color.Black
        ),
            elevation = CardDefaults.cardElevation(defaultElevation = 2.dp),
            modifier = Modifier
                .padding(horizontal = 6.dp, vertical = 6.dp)
                .offset { IntOffset(swipeableState.offset.value.roundToInt(), 0) }
                
                .clickable {
                    
                    mContext.startActivity(Intent(mContext, DCInfo::class.java))
                }
                .border(1.dp, SolidColor(Color(0xFF1C536F)), shape = RoundedCornerShape(15.dp))
                .fillMaxWidth(), shape = RoundedCornerShape(CornerSize(15.dp))
        )

方案一:使用combinedClickable修饰符(推荐)

Compose中没有单独的.longclick{}修饰符,要同时处理单击和长按,推荐替换clickable为combinedClickable,它支持同时配置单击、长按等事件:

修改后的代码:

Card(colors = CardDefaults.cardColors(
            containerColor = Color(0xFF7DCEA0), Color.Black
        ),
            elevation = CardDefaults.cardElevation(defaultElevation = 2.dp),
            modifier = Modifier
                .padding(horizontal = 6.dp, vertical = 6.dp)
                .offset { IntOffset(swipeableState.offset.value.roundToInt(), 0) }
                // 替换clickable为combinedClickable
                .combinedClickable(
                    onClick = {
                        mContext.startActivity(Intent(mContext, DCInfo::class.java))
                    },
                    onLongClick = {
                        // 这里添加长按事件的逻辑
                        // 示例:Toast.makeText(mContext, "长按触发", Toast.LENGTH_SHORT).show()
                    }
                )
                .border(1.dp, SolidColor(Color(0xFF1C536F)), shape = RoundedCornerShape(15.dp))
                .fillMaxWidth(), shape = RoundedCornerShape(CornerSize(15.dp))
        )

若IDE未自动导入,需手动添加包:import androidx.compose.foundation.clickable.combinedClickable。

方案二:使用pointerInput处理长按事件

如果需要保留原有的clickable,也可以通过pointerInput单独添加长按逻辑:

Card(colors = CardDefaults.cardColors(
            containerColor = Color(0xFF7DCEA0), Color.Black
        ),
            elevation = CardDefaults.cardElevation(defaultElevation = 2.dp),
            modifier = Modifier
                .padding(horizontal = 6.dp, vertical = 6.dp)
                .offset { IntOffset(swipeableState.offset.value.roundToInt(), 0) }
                .clickable {
                    mContext.startActivity(Intent(mContext, DCInfo::class.java))
                }
                .pointerInput(Unit) {
                    detectTapGestures(
                        onLongPress = {
                            // 长按事件逻辑
                        }
                    )
                }
                .border(1.dp, SolidColor(Color(0xFF1C536F)), shape = RoundedCornerShape(15.dp))
                .fillMaxWidth(), shape = RoundedCornerShape(CornerSize(15.dp))
        )

此方式需导入包:import androidx.compose.foundation.gestures.detectTapGestures,但相比方案一,combinedClickable更简洁统一,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:32:58