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;
}
This one also works for Kotlin. Simply return true
view.setOnLongClickListener {
Toast.makeText(this,"This is a long click",Toast.LENGTH_SHORT).show();
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With