Android Data Binding
Veamos cómo preparar tu entorno de desarrollo para trabajar con la Data Binding Library, incluyendo el soporte para el código data binding en Android Studio.
Paso 1. Habilitar data-binding:
Para utilizar data binding en nuestro proyecto debemos habilitarlo en el archivo build.gradle a nivel de app.
dataBinding {
enabled = true
}
Paso 2. Cambiar el archivo de layout para que se pueda utilizar con data-binding:
El lenguaje de expresión permite escribir expresiones que conectan variables con las vistas en el layout. La biblioteca de enlace de datos genera automáticamente las clases necesarias para enlazar las vistas del diseño con sus objetos de datos. La biblioteca proporciona características tales como importaciones, variables, e incluye que usted puede utilizar en sus diseños.
Para que el layout utilice la vinculación de datos, la vista superior del layout debe ser la vista <layout> o, en otros términos, tenemos que envolver todo el layout en la etiqueta <layout> así:
<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Para utilizar datos de otras clases u objetos tenemos que crear un objeto de datos dentro del archivo del layout y declarar la variable de esa clase u objeto en él.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Para evitar errores todos los nombres de los paquetes deben comenzar con el alfabeto en minúsculas y todos los nombres de las clases de datos deben comenzar con el alfabeto en mayúsculas.
Paso 3. Crear un objeto de enlace en la actividad/fragmento:
Ahora es el momento de conectar nuestro diseño a la actividad/fragmento utilizando data-binding.
Crear un objeto de enlace en el archivo:
El tipo de enlace se deriva del nombre del archivo de diseño. por ejemplo, si el nombre del archivo de diseño era activity_main.xml, entonces data-binding creará una clase llamada ActivityMainBinding y este archivo incluirá todas las propiedades y funciones necesarias.
private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding
Inicializar la variable binding en el método onCreate():
Ahora tenemos que inicializar el binding y reemplazar el método setContentView () existente. Esto se puede hacer llamando a la clase DataBindingUtil o utilizando directamente el tipo de binding.
Para la actividad no se puede utilizar el tipo de binding.
//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)
Paso 4. Utilizar el objeto binding:
Ahora podemos utilizar el binding que hemos creado para dos fines:
- Reemplazar todas las llamadas a findViewById o sólo las importaciones sintéticas por binding.<view’s id>.
e.g si hay una vista de texto en el diseño con id muestra_texto, debemos estar usando esto en cualquiera de las dos formas dadas
findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"
Ahora esto será reemplazado por
binding.sampleText.text = "dummy_text"
Note el nombre de la propiedad en la clase de vinculación es sólo la forma camelcase del ID de la vista.
e.g muestra_texto se convierte en muestraTexto
2. Establecer la variable declarada en el objeto de datos en el diseño y luego usarlo en el archivo de diseño.
Si el archivo de diseño tiene una variable llamada «usuario»
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>
Entonces tenemos que establecer esto en activity/fragment
binding.user = User()
Y ahora podemos usar esto para poblar los datos de las vistas.
Por ejemplo, si hay una vista de texto que muestra el nombre del usuario, entonces podemos utilizar @{} sintaxis para establecer el valor.
<TextView
...
android:text="@{user.userName}"
...
/>
De esta manera, podemos evitar una gran cantidad de código que se hace para establecer las vistas mediante programación y dejar que data-binding se encargue de ello.
Leave a Reply