En este post te mostraré cómo agregar listeners en Android usando el lenguaje Kotlin; como sabes, la sintaxis cambia un poco y por eso al invocar a setOnClickListener o setOnLongClickListener se crean confusiones.
Después de leer este post verás que es realmente sencillo poner listeners con Kotlin, además de que se utiliza menos código.
Comencemos con el ClickListener
. Esta es una interfaz definida en la clase View
. Su código es realmente sencillo:
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/ void onClick(View v);
}
Así que para agregar un listener en Kotlin usamos algo como lo siguiente:
vista.setOnClickListener(fun(v: View) {
/*
* Aquí el código que se ejecuta dentro del listener
* Recuerda que puedes acceder a la View dentro de la
* variable v
* */})
En este caso la variable vista
es algo obtenido con findViewById
como un botón o campo de texto. Recuerda que dentro del listener se nos pasa una vista de tipo View
la cual recibimos en v
.
Puedes usar una versión simplificada usando una función de una sola línea:
vista.setOnClickListener { v -> Log.d("Click", v.toString()) }
En ese caso tienes la View
en v
.
También existe la versión corta si no vas a usar la vista:
vista.setOnClickListener {
/*
* Aquí el código
* */}
Y aunque parezca que no está disponible, puedes acceder a la vista usando la variable especial it
.
vista.setOnClickListener {
/*
* Aquí el código
* */ Log.d("Click", it.toString())
}
Ahora veamos la interfaz OnLongClickListener
en Kotlin; la misma se encarga de escuchar un click largo. Esta interfaz es distinta porque en su método necesitamos devolver un booleano indicando si consumimos o no el evento.
El código fuente de la interfaz está en View, y se ve así:
/**
* Interface definition for a callback to be invoked when a view has been clicked and held.
*/public interface OnLongClickListener {
/**
* Called when a view has been clicked and held.
*
* @param v The view that was clicked and held.
*
* @return true if the callback consumed the long click, false otherwise.
*/ boolean onLongClick(View v);
}
Como ves, se debe regresar un booleano indicando si hemos consumido el long click. Pero bueno, para usarlo se hace esto:
vista.setOnLongClickListener {
/*
* Aquí el código que se debe ejecutar
* cuando se haga un click largo
*
* Recuerda que debes regresar true o false
* indicando si consumiste el long click
* */ return@setOnLongClickListener true
}
Recuerda que puedes acceder a la vista View
a través del parámetro especial it
. En mi caso lo uso así:
vista.setOnLongClickListener {
interfazClickRecyclerView.onClick(it, deudas!![viewHolder.adapterPosition])
return@setOnLongClickListener true
}
Lo estoy usando en conjunto con mi interfaz para el RecyclerView.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.