Kotlin Android Extensions: Adiós al findViewById (KDA 04)

Importante: desde Kotlin 1.4.20, las Kotlin Android Extensions están deprecadas, y la recomendación es usar ViewBinding en su lugar.
Hacia finales de 2021 el plugin será eliminado, así que es necesario migrar
Seguramente estés cansado en tu día a día de trabajar con findViewBy__Id para recuperar las vistas, o que ya te hayas dado por vencido y recurrido a la famosa librería Butterknife. Kotlin Android Extensions es mucho mejor que todo eso.
Si quieres empezar hoy, te recomiendo que le eches un vistazo a mi training gratuito, donde tendrás una hora y media de contenido para saber cuáles son tus siguientes pasos a dar para convertirte en un experto en Kotlin.
Koltlin Android Extensions
Las Kotlin Android Extensions consisten en un nuevo plugin de Kotlin que se integra de manera totalmente transparente en nuestro código, y nos permiten recuperar las vistas de Activities, Fragments y Views de forma totalmente transparente.
1. Integrando Kotlin Android Extensions en nuestro código
Aunque el plugin viene integrado en el que ya nos descargamos de Kotlin, para poder utilizarlo necesitamos añadir un apply extra en nuestro proyecto:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Y esto es todo lo que necesitas, ya estás listo para trabajar con él
2. Recuperando las vistas en una activity o fragment
A partir de ese momento, es tan sencillo como utilizar el identificador que indicaste en el XML directamente en tu actividad o Fragment.
Supongamos que tenemos un XML como este:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/welcomeMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Hello World!"/>
</FrameLayout>
Como ves, el TextView
tiene el identificador welcomeMessage
.
Tan sólo tienes que irte a la MainActivity
y escribirlo:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
welcomeMessage.text = "Hello Kotlin!"
}
Para poder utilizarlo, necesitas un import especial, que es el que te pongo a continuación, pero el plugin de Kotlin es capaz de auto-importarlo. ¡No podría ser más sencillo!
import kotlinx.android.synthetic.main.activity_main.*
El código que esto genera por detrás será capaz de almacenar una caché de vistas, para que cada vez que se pida nuevamente no sea necesario hacer el findViewById
real.
3. Recuperando vistas de una vista
Imagina que tienes una vista como esta:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/itemImage"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<TextView
android:id="@+id/itemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Y que la estás inflando en un adapter, por ejemplo.
También puedes acceder directamente a sus subvistas sin necesidad de utilizar nada extra, tan solo usando este plugin:
val itemView = ...
itemView.itemImage.setImageResource(R.mipmap.ic_launcher)
itemView.itemTitle.text = "My Text"
Aunque el plugin también te ayudará a rellenar el import, este es un poco diferente del anterior:
import kotlinx.android.synthetic.main.view_item.view.*
Aquí hay un par de apuntes que hacer:
-
En tiempo de compilación, te va a dejar acceder a cualquier vista desde cualquier otra. Es decir, podría no tener esas vistas como hijas. Pero en tiempo de ejecución, irá a buscarlas y no las encontrará, así que lanzará una excepción.
-
Aquí no almacena una caché de vistas como con las Activities y los Fragments.
Pero usándolas con cabeza, son una herramienta muy poderosa
Conclusión
Ya has visto lo sencillo que es tratar con las vistas de Android en Kotlin. Con un simple plugin podemos olvidarnos de todas las complicaciones inherentes a la recuperación de las vistas desde un XML, ya que éste nos crea las properties con el tipo correcto sin más complicación.
Si te gusta lo que has visto, te animo a que te apuntes al training gratuito, donde te contaré todo lo que necesitas para aprender a crear tus Apps Android en Kotlin desde cero.
Cómo conseguir la localización amplia en Android
Cómo pedir permisos en Jetpack Compose