View Binding

Si ya eres conocedor de Android, conocerás findViewById, que permite vincular las vistas de la aplicación con las clases, y así poder acceder a determinadas propiedades de los widgets de las vistas.

Desde la versión 3.6 de Android Studio, es posible utilizar View Binding para enlazar los elementos de los layouts con las clases. Este sistema ofrece una mayor seguridad frente a nulos, ya que establece referencias directas, evitando así los punteros nulos. También garantiza la seguridad de tipos, esto quiere decir que cada campo de cada clase tendrá tipo correcto de la vista a la que hace referencia en el fichero XML.

Como seguramente ya estés trabajando con una versión de Android Studio superior a la 4.0, para habilitar el uso de View Binding deberás añadir las siguientes líneas en el fichero build.gradle a nivel de Module:app.

// Android Gradle Plugin 4.0
buildFeatures {
    viewBinding = true
}

Tras sincronizar el Gradle, se hará uso de la nueva funcionalidad, se hará el binding. Observa como se inflaría la activity main en su clase.

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ...

Observa el uso de lateinit para poder inicializar la variable llegado el momento, en este caso, se inicia en el método onCreate(). Como dato interesante, fíjate en el tipo de clase, ActivityMainBinding, se llama así debido a que hace referencia a activity_main.xml. Si el fichero se llamase referencias_layout.xml, la clase sería ReferenciasLayoutBinding.

Ahora ya puedes acceder a cualquier vista del layout haciendo referencia al binding.

binding.btHello.setOnClickListener { sayHello() }

Espero que te sirva de ayuda, au!!