Ограничение доступа
Ролевой механизм
Загрузка модулей410013796724260
|
Вернуться к «Разработчикам Android»
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. |
