Android 如何在Kotlin中正确使用setOnLongClickListener()
我一直在尝试设置长时间单击侦听器事件,但不断出现以下错误:Android 如何在Kotlin中正确使用setOnLongClickListener(),android,kotlin,onlongclicklistener,Android,Kotlin,Onlongclicklistener,我一直在尝试设置长时间单击侦听器事件,但不断出现以下错误: 类型不匹配。 必填项:布尔值 发现:单位 我对setOnClickListener事件没有任何问题,但由于某种原因,我对setOnLongClickListener事件没有任何运气 我当前正在尝试显示一个简单的土司: view.setOnLongClickListener{ Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show(); } 我已
类型不匹配。
必填项:布尔值
发现:单位
我对setOnClickListener
事件没有任何问题,但由于某种原因,我对setOnLongClickListener
事件没有任何运气
我当前正在尝试显示一个简单的土司
:
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show();
}
我已经看过很多Java示例,但是我还没有找到Kotlin的示例。
OnLongClickListener。onLongClick
签名要求您返回一个布尔值,以通知您是否实际使用了事件
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
return@setOnLongClickListener true
}
或
另一种方式可以是
view.setOnLongClickListener{
dispathAnEventOnLongClick("Long click detected!");
}
private fun dispathAnEventOnLongClick(text:CharSequence): Boolean {
Toast.makeText(applicationContext,text,Toast.LENGTH_SHORT).show();
return true;
}
内联函数
您可以创建使用函数并返回布尔值的内联函数。然后将其用于任何需要布尔值作为返回类型的函数
在kotlin文件中:
inline fun consume(function: () -> Unit): Boolean {
function()
return true
}
view.setOnLongClickListener {
consume { Toast.makeText(context, "Long click detected", Toast.LENGTH_SHORT).show() }
}
用法:
inline fun consume(function: () -> Unit): Boolean {
function()
return true
}
view.setOnLongClickListener {
consume { Toast.makeText(context, "Long click detected", Toast.LENGTH_SHORT).show() }
}
现在,您的代码将正常工作并返回一个真值,以满足setOnLongClickListener
方法的需要。您可以将此函数consume
与任何需要真值的函数(如oncreateoptions menu
和onoptions itemselected
)重用,而无需显式返回真值
此方法使用:。而您检查为最佳答案的解决方案使用:。我喜欢这个
内部onCreate,
findViewById<Button>(R.id.myButton).setOnLongClickListener(myButtonLongClickListener)
private var timeButtonLongClickListener = View.OnLongClickListener {
true
}
这个也适用于Kotlin。简单地返回true
view.setOnLongClickListener{
Toast.makeText(这是一个长点击),Toast.LENGTH_SHORT.show();
真的
}
很好的答案我们想添加一个想法,当您尝试构造此代码时,编译器会抱怨,如果在开始和结束之间的任何其他代码行之前没有添加return或true语句,初学者或新手会认为输入的是错误的,只是想一想谢谢您,SamuelRemember,您可以访问侦听器通过使用Kotlin函数中的“it”变量传递的视图对我来说,它将我的if/else结构标记为红色,因此我认为我没有编写正确的比较。这在一段时间内确实令人困惑,花了20分钟重新键入我的括号以确保它们是正确的(它们是正确的)。您可以在代码部分使用代码块,这将使您的问题/答案变得非常棒。我相信您的解决方案与公认的解决方案完全相同。