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

Kotlin中setOnLongClickListener()报错:类型不匹配,求正确用法

解决Kotlin中setOnLongClickListener的Type mismatch错误

这个问题我之前也碰到过,其实原因很简单——Kotlin里的setOnLongClickListener和setOnClickListener对回调的返回值要求不一样!

问题根源

setOnClickListener的回调不需要返回值(返回Unit,对应Java中的void),但setOnLongClickListener的回调必须返回一个Boolean值,用来告诉系统:这个长按事件是否已经被你处理了。而你现在的代码里,Toast.makeText(...).show()返回的是Unit,自然就会出现「Type mismatch. Required:Boolean Found:Unit」的错误。

解决方法

只需要在你的lambda代码块最后,添加一个Boolean类型的返回值就行,有两种常用写法:

写法1:利用Kotlin lambda的隐式返回

Kotlin中lambda的最后一行表达式就是返回值,直接在Toast代码后加true或false即可:

view.setOnLongClickListener {
    Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
    true // 表示已处理该事件,系统不会再触发后续相关行为
}

写法2:显式指定返回(可读性更高)

如果你想让代码逻辑更清晰,可以用return@setOnLongClickListener显式声明返回值:

view.setOnLongClickListener {
    Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
    return@setOnLongClickListener true
}

关于返回值的小说明

  • 返回true:告诉系统你已经处理了这个长按事件,系统不会再把事件传递给其他监听器,也不会触发该View的默认长按行为(比如文本选择)。
  • 返回false:表示你没有处理这个事件,系统会继续把事件传递给上层监听器,或者触发View的默认长按行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:48:12