The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
Layouts are often defined in activities with code that calls UI framework
methods. For example, the code below calls findViewById() to find a TextView widget and bind it to the userName property of the
viewModel variable:
findViewById<TextView>(R.id.sample_text).apply { text = viewModel.userName }
TextView textView = findViewById(R.id.sample_text); textView.setText(viewModel.getUserName());
The following example shows how to use the Data Binding Library to assign text
to the widget directly in the layout file. This removes the need to call any of
the Java code shown above. Note the use of @{} syntax in the assignment
expression:
<TextView
android:text="@{viewmodel.userName}" />
Binding components in the layout file lets you remove many UI framework calls in your activities, making them simpler and easier to maintain. This can also improve your app's performance and help prevent memory leaks and null pointer exceptions.
Use the following pages to learn how to use the Data Binding Library in your Android apps.
The expression language allows you to write expressions that connect variables to the views in the layout. The Data Binding Library automatically generates the classes required to bind the views in the layout with your data objects. The library provides features such as imports, variables, and includes that you can use in your layouts.
These features of the library coexist seamlessly with your existing layouts.
For example, the binding variables that can be used in expressions are defined
inside a data element that is a sibling of the UI layout's root element.
Both elements are wrapped in a layout tag, as shown in the following
example:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.myapp.data.ViewModel" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
setText() method
to set the text property or call the setOnClickListener() method to add a
listener to the click event. The most common binding adapters, such as the
adapters for the android:text property used in the examples in this page,
are available for you to use in the android.databinding.adapters package.
For a list of the common binding adapters, see
adapters.
You can also create custom adapters, as shown in the following example:@BindingAdapter("app:goneUnless") fun goneUnless(view: View, visible: Boolean) { view.visibility = if (visible) View.VISIBLE else View.GONE }
@BindingAdapter("app:goneUnless") public static void goneUnless(View view, Boolean visible) { view.visibility = visible ? View.VISIBLE : View.GONE; }
To learn more about data binding, consult the following additional resources.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2026-05-18 UTC.