Афоризм
У тебя ноги уже кончились, а платье еще не началось!
Лариса Гузеева
Последние статьи

 • Ограничение доступа
Ограничение прав доступа к организациям на уровне БД
 • Ролевой механизм
Интегрирование ролей БД в приложениe JaBricks
 • Загрузка модулей
Динамическая загрузка модулей в приложениe
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

Data Binding в Android

Главным нововведением Android Studio 3.6 Canary 11 стала Data Binding Library, которая является частью Android Jetpack. Библиотека Data Binding позволяет привязывать компоненты пользовательского интерфейса в макетах (layout) к источникам данных в приложении, используя декларативный формат. Другими словами, Data Binding помогает организовывать работу с View так, чтобы избежать вызовы методов findViewById, setText, setOnClickListener и т.п.

Data Binding — это инструмент, который «упрощает» написание java-кода для взаимодействия с View (интерфейсный компонент), т.е. помогает выполнить связывание некоторого java-объекта с макетом интерфейса (layout, xml-файл). Таким образом, библиотека позволяет вынести описание свойств и вызовов методов java-объектов в xml-разметку layout.

Подключение Data Binding

Чтобы библитека Data Binding стала доступной в Activity необходимо в скрипте проекта/модуля Gradle Scripts/build.gradle в секцию android добавить определение dataBinding, как это представлено в следующем коде :


android {
    ...
    dataBinding {
        enabled = true
    }
    ...
}

Корневой layout

Следующим шагом для использования Data Binding в приложении является необходимость «оборачивания» контента описания интерфейса в корневой layout. Допустим наш файл activity_main.xml имеет следующий вид :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity">

  <TextView
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Hello World!"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

  <Button
    android:layout_width="160dp"
    android:layout_height="48dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="@string/button"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tv_hello" />

</androidx.constraintlayout.widget.ConstraintLayout>

После «оборачивания» его в корневой <layout><наш_макет></layout> он примет вид :


<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:android="http://schemas.android.com/apk/res/android">

<androidx.constraintlayout.widget.ConstraintLayout
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity">

  <TextView
    android:id="@+id/tv_name"
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Hello World!"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

  <Button
    android:id="@+id/button"
    android:layout_width="160dp"
    android:layout_height="48dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="@string/button"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tv_hello" />

</androidx.constraintlayout.widget.ConstraintLayout>

</layout>

Визуальные компоненты (View) можно связать с java-объектами только при наличии у них идентификатора android:id. Обратите внимание, что в контент описания интерфейса (layout) добавлены обязательные атрибуты android:id для компонентов TextView и Button.

Определение Data Binding в Activity

При использовании Data Binding в приложении библиотека генерирует Binding классы для каждого файла разметки layout. Имя генерируемого класса формируется как "название файла разметки", переведенное в CamelСase + «Binding». CamelCase — это ВерблюжийРегистр, стиль написания, в котором слова пишутся без пробелов и без символов подчеркивания с заглавной буквы. Так, например, для файла разметки activity_main.xml будет сгенерирован класс ActivityMainBinding.

Чтобы создать объект класса ActivityMainBinding, необходимо вызвать его статический метод inflate(). У созданного объекта "binding" методом getRoot() можно получить корневой элемент XML-разметки и передать его в качестве параметра методу setContentView() в Activity. Альтернативный способ получения объекта ActivityMainBinding связан с использованием утилиты DataBindingUtil и её метода setContentView(), как это представлено в следующем примере :


public class MainActivity extends AppCompatActivity
{
    ActivityMainBinding binding;

   @Override
   protected void onCreate(Bundle bundle)
   {
      super.onCreate(bundle);

      LayoutInflater inflater = getLayoutInflater();
      binding = ActivityMainBinding.inflate(inflater);
      setContentView(binding.getRoot());
   
      // 2-ой способ создания binding
//    binding = DataBindingUtil.setContentView(
//                              this, R.layout.activity_main);
   }
}

Полученный объект binding типа ActivityMainBinding можно использовать для определения значения View и подключения обработчиков событий :


// определение значения
binding.name.setText("Олег");

// подключение обработчика события
binding.button.setOnClickListener(
    new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            binding.name.setText("Сергей");
        }
    }
);

Преобразование id в наименование переменной

В приведенном выше примере каждый идентификатор android:id="@+id/component_name" в шаблоне XML автоматически преобразовывается в Java переменные. По сути, все сводится к извлечению символов подчеркиваний и переводу оставшейся части в формат CamelCase. И здесь имеются нюансы такой трансформации. Переменная компонент с android:id="@+id/tv_name" получит наименование tvName. Но если в интерфейсе присутствует компонент с идентификатором android:id="@+id/tvName", то библиотека связывания его уже не "увидит". Поэтому, используйте однотипные стили именования идентификаторов, чтобы это не вызвало дополнительных сложностей и проблем при разработке.

Пример Data Binding

Описание Data Binding было бы неполным, если не рассмотреть весь пример целиком, а не его отдельные части. И на сайте, по возможности, к описанию какой-либо технологии/библиотеки я стараюсь приложить пример. Data Binding также не будет исключением. К примеру использования DATA BINDING Вы можете перейти по ссылке.

Примечание : Data Binding облегчает процесс разработки больших приложений. А если дополнительно использовать шаблон архитектуры MVVM (Model-View-ViewModel) в сочетании с Data Binding, то эта технология существенно упростит работу программистов. При этом, код будет более прозрачным и его легче будет поддерживать. И здесь имеется маленький недостаток — это надо изучить.

К продолжению статьи с описанием шаблона архитектуры Model-View-ViewModel и Data Binding Вы можете перейти по ссылке : Data Binding Library и MVVM.

  Рейтинг@Mail.ru