Cómo usar el enlace de datos en Android | Por Farhan Tanvir | Abril de 2022
Haz que tu código sea más legible
El enlace de datos se considera una de las mejores prácticas en el desarrollo moderno de Android. Es parte del jetpack de Android.elimina findViewById()
Esta es a veces una operación costosa. El enlace de datos tiene muchos beneficios. Mantiene nuestro código limpio, mantenible y legible.
Primero necesitamos saber qué es el enlace de datos.Según documentación oficial
La biblioteca de vinculación de datos es una biblioteca de soporte que le permite vincular los componentes de la interfaz de usuario en un diseño a las fuentes de datos en su aplicación mediante un formato declarativo en lugar de mediante programación.
Esta es una magnífica aplicación. ¿no es así?
Esta aplicación está hecha con estructura MVVM y muchos otros componentes modernos de Android. Hoy veremos cómo implementé el enlace de datos en este proyecto.
Para este artículo, este GitHub Usa un repositorio. Siéntete libre de comprobarlo.Empecemos
Primero, habilite dataBinding
Opciones de compilación en módulos de aplicación build.gradle
documento.
android {
...
buildFeatures {
dataBinding true
}
}
Para generar clases vinculantes, necesitamos envolver el diseño en
Etiqueta.Por ejemplo, vamos a comprobar lo siguiente fragment_image_viewer.xml
.
puedes ver en lugar de empezar ConstraintLayout
He empezado
Etiqueta.diré Marca más tarde. Ahora que la configuración está completa, si construimos nuestro proyecto, se generarán las clases vinculantes.
Los enlaces tienen una convención de nomenclatura. Toma los nombres de los diseños XML, elimina los guiones bajos y hace que cada nombre comience con una letra mayúscula. Luego agregue enlaces al final. ¿Confundido? por ejemplo,
fragment_image_viewer.xml -> FragmentImageViewerBinding
Espero que esté claro ahora.
Dado que la compilación está completa, ahora podemos acceder a los enlaces como se muestra a continuación.
private var _binding: FragmentImageViewerBinding? = null
private val binding get() = _binding!!
Puedes ver el tipo de datos _binding
Sí FragmentImageViewerBinding
Puedes preguntar, no podemos visitar FragmentImageViewerBinding
como variables normales? Sí tu puedes. Pero en este caso, existe la posibilidad de una pérdida de memoria. Si desea obtener más información sobre las fugas de memoria en Android, consulte este artículo.
Anteriormente usábamos setContentView
Pero en su lugar, podemos hacer algo como
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
// Inflate the layout for this fragment
_binding = FragmentImageViewerBinding.inflate(inflater, container, false)
return binding.root
}
Ahora podemos usar binding
variables para acceder a nuestros componentes de diseño y realizar operaciones relacionadas con el diseño.Como ejemplo de configuración de texto en un TextView, podemos usar binding.textView.text = "text"
.
Dije antes que lo haré Marca más tarde. Ahora es el momento de hablar de ello.
simplemente pon, declara que hay datos y
Las etiquetas describen el nombre y el tipo de datos.Puede acceder al valor en XML simplemente "@{variable_name}"
Puede pasar cualquier tipo de datos al interior, así como objetos personalizados.
Etiqueta. Esa es la belleza del enlace de datos.
En el ejemplo anterior, puede ver lo siguiente
<data>
<variable
name="imageSrc"
type="com.farhan.tanvir.pexels.data.model.Src" />
data>
El nombre de la variable aquí es imageSrc
Y el tipo es un objeto personalizado (en este caso, una clase de datos).puedes establecer variables imageSrc
A partir de una ImageViewerFragment
atravesar binding.imageSrc = imageSrc
Ahora puedes acceder imageSrc
Las variables en el diseño son solo "@{imageSrc}"
.
Otra ventaja del enlace de datos es la personalización. Vamos a crear un enlace de datos personalizado que cargará una imagen en un ImageView.
Aquí creé un nombre de enlace personalizado loadImageFromUrl
Esto cargará la imagen en ImageView
Podemos usar este enlace personalizado en ImageView en el diseño XML como se muestra a continuación.
<ImageView
loadImageFromUrl="@{imageUrl}"
android:id="@+id/wallpaperImageView"
/>
ahora carga la imagen en ImageView
Asombroso. ¿no es así?