La bibliothèque Data Binding génère des classes de liaison que vous pouvez utiliser pour accéder variables et vues de la mise en page. Cette documentation explique comment créer et personnaliser les classes de liaison générées.
La classe de liaison générée associe les variables de mise en page aux vues incluses dans le
mise en page. Vous pouvez personnaliser le nom et le package de
la liaison. Toutes les classes de liaison générées héritent du
ViewDataBinding.
Une classe de liaison est générée pour chaque fichier de mise en page. Par défaut, le nom
est le nom du fichier de mise en page converti en casse Pascal avec la liaison.
qui lui a été ajouté. Ainsi, par exemple, si le nom de fichier de la mise en page est
activity_main.xml, la classe générée correspondante est ActivityMainBinding.
Cette classe contient toutes les liaisons des propriétés de mise en page vers le composant
et sait comment attribuer des valeurs aux expressions de liaison.
Créer un objet de liaison
L'objet de liaison est créé immédiatement après avoir gonflé la mise en page
que la hiérarchie des vues n'est pas modifiée avant de s'associer aux vues avec
dans la mise en page. La méthode la plus courante pour lier l'objet à
consiste à utiliser les méthodes statiques sur la classe de liaison. Vous pouvez gonfler le
la hiérarchie des vues et liez l'objet à celui-ci à l'aide de la méthode inflate() de
binding, comme illustré dans l'exemple suivant:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding: MyLayoutBinding = MyLayoutBinding.inflate(layoutInflater) setContentView(binding.root) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater()); setContentView(binding.root); }
Il existe une autre version de la méthode inflate() qui accepte un
ViewGroup en plus de l'objet
LayoutInflater , en tant que
illustré dans l'exemple suivant:
Kotlin
val binding: MyLayoutBinding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false)
Java
MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false);
Si la mise en page est gonflée à l'aide d'un autre mécanisme, vous pouvez la lier séparément, comme suit:
Kotlin
val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)
Java
MyLayoutBinding binding = MyLayoutBinding.bind(viewRoot);
Parfois, vous ne connaissez pas le type de liaison à l'avance. Dans ce cas, vous pouvez
créez la liaison à l'aide de la méthode
la classe DataBindingUtil,
comme illustré dans l'extrait de code suivant:
Kotlin
val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent) val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)
Java
View viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent); ViewDataBinding binding = DataBindingUtil.bind(viewRoot);
Si vous utilisez des éléments de liaison de données dans un
Fragment,
ListView ou
RecyclerView
vous pouvez utiliser l'adaptateur
inflate()
des classes de liaisons ou de la classe
DataBindingUtil, en tant que
illustré dans l'exemple de code suivant:
Kotlin
val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false) // or val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)
Java
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false); // or ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
Vues avec ID
La bibliothèque Data Binding crée un champ immuable dans la classe de liaison pour
chaque vue ayant un ID dans la mise en page. Par exemple, la bibliothèque Data Binding
crée les champs firstName et lastName de type TextView à partir de
mise en page suivante:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
android:id="@+id/firstName"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"
android:id="@+id/lastName"/>
</LinearLayout>
</layout>
La bibliothèque extrait les vues, y compris les ID, de la hiérarchie des vues dans une
en un seul geste. Ce mécanisme peut être plus rapide que l'appel
findViewById()
pour chaque vue de la mise en page.
Les identifiants ne sont pas aussi nécessaires qu'ils le sont sans liaison de données, mais il existe dans certains cas où l'accès aux vues est nécessaire à partir du code.
Variables
La bibliothèque Data Binding génère des méthodes d'accesseur pour chaque variable déclarée
dans la mise en page. Par exemple, la mise en page suivante génère un setter et un getter
dans la classe de liaison pour les variables user, image et note:
<data>
<import