I've been trying to set up a long click listener event, but keep getting the following error:
Type mismatch.
Required:Boolean
Found:Unit
I've had no issues with the setOnClickListener
event, but for some reason I'm having zero luck with the setOnLongClickListener
event.
I'm currently trying to display a simple Toast
:
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show();
}
I've seen plenty of examples for Java, but I'm yet to find any examples for Kotlin.
OnLongClickListener.onLongClick
signature required that you return a boolean to notify if you actually consumed the event
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
return@setOnLongClickListener true
}
or
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
true
}
Another way can be this...
view.setOnLongClickListener{
dispathAnEventOnLongClick("Long click detected!");
}
private fun dispathAnEventOnLongClick(text:CharSequence): Boolean {
Toast.makeText(applicationContext,text,Toast.LENGTH_SHORT).show();
return true;
}
You can make an inline function that consume a function and return a boolean. Then use it with any functions that required a boolean as return type.
In a kotlin file:
inline fun consume(function: () -> Unit): Boolean {
function()
return true
}
Usage:
view.setOnLongClickListener {
consume { Toast.makeText(context, "Long click detected", Toast.LENGTH_SHORT).show() }
}
Now your code will work and returned a true value to satisfied the need for setOnLongClickListener
method. You can reuse this function consume
with any function that require a true value like onCreateOptionsMenu
and onOptionsItemSelected
without an explicitly needs to return a true value.
This way uses: Inline Functions . And the solution you checked as a best answer uses : Labeled Return .
I did like this.
Inside onCreate,
findViewById<Button>(R.id.myButton).setOnLongClickListener(myButtonLongClickListener)
And then,
private var timeButtonLongClickListener = View.OnLongClickListener {
true
}
This one also works for Kotlin. Simply return true
view.setOnLongClickListener {
Toast.makeText(this,"This is a long click",Toast.LENGTH_SHORT).show();
true
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.