Enlace de datos con Kotlin

Encora | 19 de noviembre, 2018

Todo desarrollador de Android debería conocer y usar Data Binding, una biblioteca que le permite vincular de forma flexible los datos de sus modelos directamente a vistas XML. Mi primera experiencia con esto fue hace aproximadamente  un año mientras trataba de configurar más de 10 fuentes diferentes para la aplicación de Android que estaba desarrollando en ese momento.

Fue entonces que descubrí el lenguaje de programación llamado Kotlin, el

cual es una herramienta poderosa.

En este artículo mostraré  el enfoque que utilicé para mezclar el poder de la vinculación de datos con Kotlin usando un ejemplo simple.

En primer lugar, después de tener un proyecto de Android creado en Android Studio, debemos agregar las dependencias de enlace de datos y Kotlin al archivo build.gradle de nuestra aplicación de esta manera:

 


//build.gradle 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-kapt' 
android { 
	.... 
    dataBinding { 
    	enabled = true 
    } 
 } 
 dependencies { 
 	... 
    // notice that the compiler version must be the same as our gradle version 
    kapt 'com.android.databinding:compiler:2.3.1' 
}

Basta con esta  configuración para comenzar a usar enlace de datos con Kotlin. Ahora continuamos avanzando a más viendo el código.

Primero, necesitamos crear un modelo. En este caso, crearemos uno básico como User.kt


data class User(val name: String, val age: Int)

 

En nuestro activity_main.xml podemos hacer algo como esto: 

 
< ?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" >
<!-- Inside the layout tag it is possible to set the data tag in order to set one or many variables. For this example we are having an User property-->
  <data> 
  	<variable name="user" type="com.kuma.sample.User" /> 
  </data>
  <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.kuma.sample.MainActivity" > 
    <TextView android:id="@+id/user_name_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="@{user.name}" tools:text="Name" />
    <TextView android:id="@+id/user_age_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="@{Integer.toString(user.age)}" tools:text="XX" />
  </LinearLayout>
</layout> 

Recuerde siempre establecer su vista xml habitual dentro de la etiqueta <layout> y adjuntarle todas las propiedades "xmlns:". De lo contrario, mostrará un error de compilación, ya que los archivos generados tendrán propiedades duplicadas.

Ahora comparto el enlace:

package com.kuma.sample
import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.kuma.kotlinsteps.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
         val user = User("Kuma", 23)
         binding.setVariable(BR.user, user)
         binding.executePendingBindings()
   }
}

 

En ese fragmento de código hay algunas cosas importantes a tener en cuenta:

  1.  Ahora existe una clase llamada ActivityMainBinding, que se autogenera desde activity_main.xml y contiene todas las referencias para usar las vistas que contiene el xml.
  2.  La forma de crear una instancia de ActivityMainBinding es un poco diferente de cómo configuramos el diseño xml para una actividad. 
  3. También hay una nueva clase BR que es algún tipo de clase R secundaria utilizada para almacenar las class=" tabindex-script" variables declaradas en la etiqueta de datos del xml. 
  4. Después de configurar la variable para el objeto de enlace, es necesario llamar a executePendingBindings () para establecer los atributos de la variable de usuario a las vistas marcadas. 
  5. Después de compilar esto, podrá ver que los datos se han configurado a su vista sin tener que escribir ningún textView.text = user.name 

Contáctenos

Contenido

Categorías

Compartir Artículo

Artículos Destacados