Как правильно использовать setOnLongClickListener() с Kotlin
Я пытаюсь настроить событие с длинным кликом, но продолжаю получать следующую ошибку:
Type mismatch.
Required:Boolean
Found:Unit
У меня не было проблем с событием setOnClickListener
, но по какой-то причине мне не повезло с событием setOnLongClickListener
.
В настоящее время я пытаюсь показать простой Toast
:
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show();
}
Я видел много примеров для Java, но я еще не нашел примеров для Kotlin.
Ответы
Ответ 1
Подпись OnLongClickListener.onLongClick
требовала, чтобы вы возвращали логическое значение, чтобы уведомить, действительно ли вы использовали событие
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
[email protected] true
}
или же
view.setOnLongClickListener{
Toast.makeText(this, "Long click detected", Toast.LENGTH_SHORT).show()
true
}
Ответ 2
Другим способом может быть это...
view.setOnLongClickListener{
dispathAnEventOnLongClick("Long click detected!");
}
private fun dispathAnEventOnLongClick(text:CharSequence): Boolean {
Toast.makeText(applicationContext,text,Toast.LENGTH_SHORT).show();
return true;
}
Ответ 3
Встроенные функции
Вы можете сделать встроенную функцию, которая потребляет функцию и возвращает логическое значение. Затем используйте его с любыми функциями, для которых в качестве возвращаемого типа требуется логическое значение.
В файле котлина:
inline fun consume(function: () -> Unit): Boolean {
function()
return true
}
Использование:
view.setOnLongClickListener {
consume { Toast.makeText(context, "Long click detected", Toast.LENGTH_SHORT).show() }
}
Теперь ваш код будет работать и вернет истинное значение для удовлетворения потребности в методе setOnLongClickListener
. Вы можете повторно использовать эту функцию consume
с любой функцией, для которой требуется истинное значение, например onCreateOptionsMenu
и onOptionsItemSelected
, без явной необходимости возвращать истинное значение.
Этот способ использует: встроенные функции. И решение, которое вы выбрали в качестве наилучшего ответа, использует: помеченный возврат.