Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Biblioteca de vinculación de datos
Parte de Android Jetpack.
La biblioteca de vinculación de datos es una biblioteca de compatibilidad que te permite vincular la IU
componentes de tus diseños a las fuentes de datos de tu app con un
de forma programática, en lugar de hacerlo de manera programática.
Los diseños a menudo se definen en actividades con código que llama al framework de la IU.
. Por ejemplo, el siguiente código llama a findViewById() para encontrar un widget TextView y vincularlo a la propiedad userName de la
Variable viewModel:
Kotlin
findViewById<TextView>(R.id.sample_text).apply {
text = viewModel.userName
}
El siguiente ejemplo muestra cómo usar la biblioteca de vinculación de datos para asignar texto
al widget directamente en el archivo de diseño. Esto elimina la necesidad de llamar a cualquiera de
el código Java que se muestra arriba. Observa el uso de la sintaxis @{} en la tarea.
expresión:
<TextView
android:text="@{viewmodel.userName}" />
La vinculación de componentes en el archivo de diseño permite quitar muchas llamadas al framework de la IU en
tus actividades para que sean más simples y fáciles de mantener. Esto también puede
mejorar el rendimiento de tu app y ayudar a prevenir fugas de memoria y punteros nulos
excepciones.
Uso de la biblioteca de vinculación de datos
Usa las siguientes páginas para aprender a usar la biblioteca de vinculación de datos en tu
Apps para Android.
Aprender a preparar tu entorno de desarrollo para trabajar con los datos
Biblioteca de vinculación, incluida la compatibilidad con código de vinculación de datos en Android Studio.
El lenguaje de expresiones te permite escribir expresiones que se conecten
variables a las vistas en el diseño. La biblioteca de vinculación de datos se realiza automáticamente
Genera las clases necesarias para vincular las vistas del diseño con tus datos.
objetos. La biblioteca proporciona funciones como importaciones, variables y
incluyes que puedes usar en tus diseños.
Estas funciones de la biblioteca coexisten perfectamente con tus diseños existentes.
Por ejemplo, las variables de vinculación que pueden usarse en expresiones se definen
dentro de un elemento data que es secundario del elemento raíz del diseño de la IU
Ambos elementos están unidos a una etiqueta layout, como se muestra a continuación
ejemplo:
La biblioteca de vinculación de datos proporciona clases y métodos para observar los datos fácilmente
para ver los cambios. No tienes que preocuparte por actualizar la IU cuando
cambios subyacentes en la fuente de datos. Puedes hacer que tus variables o sus
son observables. La biblioteca te permite crear objetos, campos
de datos observables.
La biblioteca de vinculación de datos genera clases de vinculación que se usan para acceder al
variables y vistas de tu diseño. En esta página, se muestra cómo usar y personalizar
clases de vinculación generadas.
Para cada expresión de diseño, hay un adaptador de vinculación que hace que la
llamadas al framework necesarias para establecer las propiedades o los objetos de escucha correspondientes. Para
Por ejemplo, el adaptador de vinculación puede llamar al método setText().
Para configurar la propiedad de texto o llama al método setOnClickListener() para agregar una
objeto de escucha al evento de clic. Los adaptadores de vinculación más comunes, como el
adaptadores de la propiedad android:text que se usan en los ejemplos de esta página.
están disponibles para su uso en el paquete android.databinding.adapters.
Para obtener una lista de los adaptadores de vinculación comunes, consulta
adaptadores.
También puedes crear adaptadores personalizados, como se muestra en el siguiente ejemplo:
Kotlin
@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
view.visibility = if (visible) View.VISIBLE else View.GONE
}
La biblioteca de compatibilidad de Android incluye la Arquitectura
Componentes, que puedes usar para
para diseñar apps sólidas, que puedan someterse a pruebas y admitan mantenimiento. Puedes usar el panel de
Componentes con la biblioteca de vinculación de datos para simplificar aún más el desarrollo
de la IU.
La biblioteca de vinculación de datos admite la vinculación de datos bidireccional. La notación utilizada para
este tipo de vinculación admite la capacidad de recibir cambios de datos en una propiedad
y, al mismo tiempo, escuchar las actualizaciones de los usuarios de esa propiedad
Recursos adicionales
Para obtener más información sobre la vinculación de datos, consulta los siguientes vínculos:
recursos adicionales.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2024-08-23 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2024-08-23 (UTC)"],[],[],null,["# Data Binding Library\nPart of [Android Jetpack](/jetpack).\n=========================================================\n\nThe Data Binding Library is a support library that allows you to bind UI\ncomponents in your layouts to data sources in your app using a declarative\nformat rather than programmatically.\n\nLayouts are often defined in activities with code that calls UI framework\nmethods. For example, the code below calls [findViewById()](/reference/android/app/Activity#findViewById(int)) to find a [TextView](/reference/android/widget/TextView) widget and bind it to the `userName` property of the\n`viewModel` variable: \n\n### Kotlin\n\n```kotlin\nfindViewById\u003cTextView\u003e(R.id.sample_text).apply {\n text = viewModel.userName\n}\n```\n\n### Java\n\n```java\nTextView textView = findViewById(R.id.sample_text);\ntextView.setText(viewModel.getUserName());\n```\n\nThe following example shows how to use the Data Binding Library to assign text\nto the widget directly in the layout file. This removes the need to call any of\nthe Java code shown above. Note the use of `@{}` syntax in the assignment\nexpression: \n\n \u003cTextView\n android:text=\"@{viewmodel.userName}\" /\u003e\n\nBinding components in the layout file lets you remove many UI framework calls in\nyour activities, making them simpler and easier to maintain. This can also\nimprove your app's performance and help prevent memory leaks and null pointer\nexceptions.\n| **Note:** In many cases, [view binding](/topic/libraries/view-binding) can provide the same benefits as data binding with simpler implementation and better performance. If you are using data binding primarily to replace `findViewById()` calls, consider using view binding instead.\n\nUsing the Data Binding Library\n------------------------------\n\nUse the following pages to learn how to use the Data Binding Library in your\nAndroid apps.\n\n[**Get started**](/topic/libraries/data-binding/start)\n: Learn how to get your development environment ready to work with the Data\n Binding Library, including support for data binding code in Android Studio.\n\n[**Layouts and binding expressions**](/topic/libraries/data-binding/expressions)\nThe expression language allows you to write expressions that connect\nvariables to the views in the layout. The Data Binding Library automatically\ngenerates the classes required to bind the views in the layout with your data\nobjects. The library provides features such as imports, variables, and\nincludes that you can use in your layouts.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThese features of the library coexist seamlessly with your existing layouts.\nFor example, the binding variables that can be used in expressions are defined\ninside a `data` element that is a sibling of the UI layout's root element.\nBoth elements are wrapped in a `layout` tag, as shown in the following\nexample:\n\n\u003cbr /\u003e\n\n \u003clayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/apk/res-auto\"\u003e\n \u003cdata\u003e\n \u003cvariable\n name=\"viewmodel\"\n type=\"com.myapp.data.ViewModel\" /\u003e\n \u003c/data\u003e\n \u003cConstraintLayout... /\u003e \u003c!-- UI layout's root element --\u003e\n \u003c/layout\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n[**Work with observable data objects**](/topic/libraries/data-binding/observability)\n: The Data Binding Library provides classes and methods to easily observe data\n for changes. You don't have to worry about refreshing the UI when the\n underlying data source changes. You can make your variables or their\n properties observable. The library allows you to make objects, fields, or\n collections observable.\n\n[**Generated binding classes**](/topic/libraries/data-binding/generated-binding)\n: The Data Binding Library generates binding classes that are used to access the\n layout's variables and views. This page shows you how to use and customize\n generated binding classes.\n\n[**Binding adapters**](/topic/libraries/data-binding/binding-adapters)\n: For every layout expression, there is a binding adapter that makes the\n framework calls required to set the corresponding properties or listeners. For\n example, the binding adapter can take care of calling the `setText()` method\n to set the text property or call the `setOnClickListener()` method to add a\n listener to the click event. The most common binding adapters, such as the\n adapters for the `android:text` property used in the examples in this page,\n are available for you to use in the `android.databinding.adapters` package.\n For a list of the common binding adapters, see\n [adapters](https://android.googlesource.com/platform/frameworks/data-binding/+/refs/heads/studio-master-dev/extensions/baseAdapters/src/main/java/androidx/databinding/adapters).\nYou can also create custom adapters, as shown in the following example: \n\n### Kotlin\n\n```kotlin\n@BindingAdapter(\"app:goneUnless\")\nfun goneUnless(view: View, visible: Boolean) {\n view.visibility = if (visible) View.VISIBLE else View.GONE\n}\n```\n\n### Java\n\n```java\n@BindingAdapter(\"app:goneUnless\")\npublic static void goneUnless(View view, Boolean visible) {\n view.visibility = visible ? View.VISIBLE : View.GONE;\n}\n```\n\n[**Bind layout views to Architecture Components**](/topic/libraries/data-binding/architecture)\n: The Android Support Library includes the [Architecture\n Components](/topic/libraries/architecture), which you can use to\n design robust, testable, and maintainable apps. You can use the Architecture\n Components with the Data Binding Library to further simplify the development\n of your UI.\n\n[**Two-way data binding**](/topic/libraries/data-binding/two-way)\n: The Data Binding Library supports two-way data binding. The notation used for\n this type of binding supports the ability to receive data changes to a property\n and listen to user updates to that property at the same time.\n\nAdditional resources\n--------------------\n\nTo learn more about data binding, consult the following\nadditional resources.\n\n### Samples\n\n- [Android Data Binding Library samples](https://github.com/android/databinding-samples)\n\n### Codelabs\n\n- [Android Data Binding codelab](https://codelabs.developers.google.com/codelabs/android-databinding)\n\n### Blog posts\n\n- [Android Data Binding Library --- From Observable Fields to LiveData in two steps](https://medium.com/androiddevelopers/android-data-binding-library-from-observable-fields-to-livedata-in-two-steps-690a384218f2)\n- [Data Binding --- Lessons Learnt](https://medium.com/androiddevelopers/data-binding-lessons-learnt-4fd16576b719)\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [Binding adapters {:#binding-adapters}](/topic/libraries/data-binding/binding-adapters)\n- [Layouts and binding expressions](/topic/libraries/data-binding/expressions)\n- [Generated binding classes {: #binding-classes}](/topic/libraries/data-binding/generated-binding)"]]