Android Data Binding

Voyons comment préparer votre environnement de développement à travailler avec la bibliothèque de liaison de données, y compris le support du code de liaison de données dans Android Studio.

Etape 1. Activer la liaison de données :

Pour utiliser la liaison de données dans notre projet, nous devons l’activer dans le fichier build.gradle au niveau de l’app.

dataBinding {
enabled = true
}

Etape 2. Modifier le fichier de mise en page pour être utilisable avec le data-binding:

Le langage d’expression vous permet d’écrire des expressions qui connectent les variables aux vues dans la mise en page. La bibliothèque de liaison de données génère automatiquement les classes nécessaires pour lier les vues du layout avec vos objets de données. La bibliothèque fournit des fonctionnalités telles que les importations, les variables et les includes que vous pouvez utiliser dans vos layouts.

Pour que le layout utilise la liaison de données, la vue la plus haute dans le layout doit être la vue <layout> ou en d’autres termes, nous devons envelopper le layout entier dans la balise <layout> comme ceci:

<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Pour utiliser les données d’autres classes ou objets, nous devons créer un objet de données à l’intérieur du fichier de layout et y déclarer la variable de cette classe ou de cet objet.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Pour éviter les erreurs, tous les noms de package doivent commencer par l’alphabet minuscule et tous les noms des classes de données doivent commencer par l’alphabet majuscule.

Etape 3. Créer un objet de liaison dans l’activité/fragment:

Maintenant il est temps de connecter notre mise en page à l’activité/fragment en utilisant la liaison de données.

Créer un objet de liaison dans le fichier:
Le type de liaison est dérivé du nom du fichier de mise en page. par exemple si le nom du fichier de mise en page était activité_main.xml, alors le data-binding créera une classe nommée ActivityMainBinding et ce fichier inclura toutes les propriétés et fonctions requises.

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

Initialiser la variable binding dans la méthode onCreate():

Maintenant nous devons initialiser le binding et remplacer la méthode setContentView () existante. Cela peut être fait soit en appelant la classe DataBindingUtil, soit en utilisant directement le type de binding.

Pour l’activité, le type de binding ne peut pas être utilisé.

//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)

Etape 4. Utiliser l’objet binding:

Maintenant nous pouvons utiliser le binding que nous avons créé à deux fins:

  1. Remplacer tous les appels à findViewById ou juste les importations synthétiques par binding.<id de la vue>.

e.g s’il y a une vue texte dans le layout avec l’id sample_text, nous devons l’utiliser dans l’une des deux manières données

findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"

Maintenant cela sera remplacé par

binding.sampleText.text = "dummy_text"

Notez que le nom de la propriété dans la classe de liaison est juste la forme en majuscules de l’ID de la vue.

e.g sample_text devient sampleText

2. Paramétrer la variable déclarée dans l’objet de données dans le layout et ensuite l’utiliser dans le fichier de layout.

Si le fichier de layout a une variable nommée « user »

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Alors nous devons la paramétrer dans activity/fragment

binding.user = User()

Et maintenant nous pouvons l’utiliser pour peupler les données des vues.

Par exemple, s’il y a une vue texte qui affiche le nom de l’utilisateur, alors nous pouvons utiliser la syntaxe @{} pour définir la valeur.

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

De cette façon, nous pouvons éviter beaucoup de code à faire pour définir les vues de façon programmatique et laisser le data-binding s’en occuper.

Leave a Reply