Classes de liaison générées

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