Библиотека привязки данных   Входит в Android Jetpack.

Библиотека привязки данных – это библиотека поддержки, которая позволяет привязывать компоненты пользовательского интерфейса в макетах к источникам данных в приложении, используя декларативный формат, а не программный.

Макеты часто определяются в действиях с кодом, который вызывает методы фреймворка пользовательского интерфейса. Например, в коде ниже вызывается findViewById(), чтобы найти виджет TextView и связать его со свойством userName переменной viewModel:

Kotlin

findViewById<TextView>(R.id.sample_text).apply {
    text = viewModel.userName
}

Java

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

В примере ниже показано, как использовать библиотеку привязки данных, чтобы назначить текст виджету непосредственно в файле макета. В этом случае вам не нужно вызывать код Java, показанный выше. Обратите внимание на использование синтаксиса @{} в выражении присваивания:

<TextView
    android:text="@{viewmodel.userName}" />

Связывание компонентов в файле макета позволяет удалить многие вызовы фреймворка пользовательского интерфейса в объектах activity, что упрощает их и облегчает обслуживание. Это также может повысить производительность приложения и предотвратить утечки памяти и исключения нулевого указателя.

Использование библиотеки привязки данных

Чтобы узнать, как использовать библиотеку привязки данных в приложениях для Android, ознакомьтесь со следующими страницами:

Начать
Узнайте, как подготовить среду разработки к работе с библиотекой привязки данных, включая поддержку кода привязки данных в Android Studio.

Макеты и выражения привязки

Язык выражений позволяет писать выражения, которые связывают переменные с представлениями в макете. Библиотека привязки данных автоматически генерирует классы, необходимые для привязки представлений в макете к объектам данных. Библиотека предоставляет такие функции, как импорт, переменные и включения, которые можно использовать в макетах.

Эти функции библиотеки легко сосуществуют с существующими макетами. Например, переменные привязки, которые можно использовать в выражениях, определяются внутри элемента data, который является дочерним по отношению к корневому элементу макета пользовательского интерфейса. Оба элемента заключены в тег layout, как показано в примере ниже.

<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(), чтобы задать текстовое свойство, или метод setOnClickListener(), чтобы добавить прослушиватель для события клика. Наиболее распространенные адаптеры связывания, такие как адаптеры для свойства android:text, используемые в примерах на этой странице, доступны для использования в пакете android.databinding.adapters. Список распространенных адаптеров привязки см. в разделе Адаптеры. Вы также можете создавать собственные адаптеры, как показано в примере ниже.

Kotlin

@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}

Java

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}
Как связать макеты с компонентами архитектуры
Библиотека поддержки Android включает компоненты архитектуры, которые можно использовать для разработки надежных, тестируемых и поддерживаемых приложений. Чтобы упростить разработку интерфейса, используйте компоненты архитектуры вместе с библиотекой привязки данных.
Двусторонняя привязка данных
Библиотека привязки данных поддерживает двустороннюю привязку данных. Нотация, используемая для этого типа привязки, позволяет получать изменения данных в свойстве и одновременно отслеживать обновления этого свойства пользователем.

Дополнительные ресурсы

Чтобы узнать больше о привязке данных, ознакомьтесь со следующими дополнительными ресурсами.

Образцы

Практические работы

Записи в блоге