Kotlin Android Extensions es una forma muy útil para dejar de instanciar aquellos elementos del layout con la clase findViewById.
Para ello solo hace falta poner lo siguiente en la clase:
1 |
import kotlinx.android.synthetic.main.<layout>.* |
Una vez que hayamos importado podremos acceder a los elementos del layout por el id que los hayamos asignado
Diseño
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content" tools:context=".MainActivity" android:layout_gravity="center_vertical" android:padding="40dp"> <com.google.android.material.button.MaterialButton android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundTint="@color/buttonColor" app:cornerRadius="16dp" android:text="@string/btnFind" android:id="@+id/buttonFind"/> <com.google.android.material.button.MaterialButton android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundTint="@color/buttonColor" android:id="@+id/buttonExtension" app:cornerRadius="16dp" android:text="@string/btnExtension" android:layout_marginTop="40dp"/> </androidx.appcompat.widget.LinearLayoutCompat> |
Código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package com.albrivas.extensions import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import com.google.android.material.button.MaterialButton import kotlinx.android.synthetic.main.activity_main.* // Extension utilizada class MainActivity : AppCompatActivity(){ private lateinit var btnFind: MaterialButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) instancias() acciones() } private fun acciones() { // Boton previamente instanciado con findViewById btnFind.setOnClickListener { sendMessage("Boton findViewById pulsado") } // Boton utilizado directamente gracias a la extension buttonExtension.setOnClickListener { sendMessage("Boton Extension pulsado") } } private fun instancias() { btnFind = findViewById(R.id.buttonFind) } private fun sendMessage(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } } |
Por si alguien necesita el código de todo el proyecto, dejo aquí el repositorio: