Je lis comment fonctionne l'architecture MVVM et comment utiliser Android.
D'une manière très générale, je comprends que Android La liaison de données crée un lien entre la couche d'interface utilisateur et le modèle de données sous-jacent qui contient les informations à afficher.
Kotlin Android Les extensions sont un autre plugin Kotlin qui vous permettra de récupérer des vues à partir d'activités, de fragments et de vues. Le plugin générera du code supplémentaire qui vous permettra d'accéder aux vues dans la disposition XML, juste comme s'il s'agissait de propriétés portant le nom de l'ID que vous avez utilisé dans la définition de la mise en page.
Quelle est la différence entre l'utilisation des extensions Android Data Binding Library et Kotlin Android)? Sont-elles à des fins différentes? Se complètent-elles, de quelle manière?
Merci pour vos réponses.
Les deux Kotlin Android Extensions et Android Data Binding Library aident à éliminer l'utilisation de findViewById
).
Mais il y a aussi plus de choses que cela fait, qui peuvent se compléter. Pour élaborer, avec la bibliothèque Android Data Binding, vous pouvez `` définir '' des modèles dans vos fichiers xml, qui peuvent ensuite être directement exploités pour définir des valeurs pour les vues dans la mise en page. Voir comment un <data>
tag peut être utilisé avec la bibliothèque de liaison de données.
Kotlin Android ne le prévoient pas. En même temps, les extensions Kotlin Android prévoient des fonctionnalités incroyables comme @parcelize
annotation pour rendre les classes parcellables avec presque aucun code passe-partout, etc.
Pour conclure, bien qu'ils éliminent tous deux l'utilisation de findViewById
, ils ont aussi leurs propres fonctionnalités qui peuvent bien se compléter.
Kotlin Android Extensions ne signifie pas uniquement la liaison de vues. Il contient également d'autres fonctionnalités. Mais je suppose que vous parlez des fonctionnalités de liaison/mise en cache des vues de Kotlin Android Extensions et je me demande si nous avons encore besoin de la liaison de données, car nous nous sommes déjà débarrassés des appels findViewById avec les propriétés synthétiques de Kotlin. C'était la question que je me suis posée et ma conclusion est, oui, la liaison de données vaut toujours la peine d'être utilisée.
La bibliothèque de liaison de données crée un champ immuable dans la classe de liaison pour chaque vue qui a un ID dans la mise en page… La bibliothèque extrait les vues, y compris les ID de la hiérarchie des vues en une seule passe. Ce mécanisme peut être plus rapide que d'appeler la méthode findViewById () pour chaque vue de la présentation.
La liaison de données n'appelle donc pas findViewById sur les vues une par une. Les classes synthétiques de Kotlin, en revanche, appellent toujours findViewById sur les vues sous le capot, mais il l'appelle une seule fois pour chaque vue et met en cache la référence de vue pour les appels suivants. (Voici un article à ce sujet)
En outre, la liaison de données a bien plus à offrir que la simple mise en cache des vues. Vous pouvez utiliser des balises de données pour transmettre des données à l'implémentation de liaison et les déclarer dans votre xml, au lieu de les définir par programme. De cette façon, vous pouvez vous débarrasser du code passe-partout que vous utilisez pour remplir les données, comme ces "setText", "setImageResource", etc. Vous pouvez définir des écouteurs d'événements à partir de XML en utilisant la liaison de données. Vous pouvez également créer vos propres attributs à l'aide d'adaptateurs de liaison personnalisés. Lorsqu'il est utilisé à sa pleine puissance, il peut réduire considérablement votre code Java/Kotlin.
Edit: Il semble que Google Android recommande contre l'utilisation des propriétés synthétiques de kotlin. Cet article résume la discussion autour de cette question. Et vous pouvez voir dans le nouveau cours Udacity préparé par Google qu'ils utilisent la liaison de données comme pratique recommandée.
Je suis fortement en désaccord avec les points mentionnés ci-dessus. peut-être parce que je déteste écrire la logique en XML. donc les deux commentaires mentionnent l'utilisation de balises <data>
introuvables dans Kotlin Android Extensions (KTX). avec kotlin et KTX, vous pouvez faire mieux que la balise de données.
disons que nous avons
data class Person(val name:String,
val phone:String,
val isMale:Boolean,
val isMarried:Boolean)
dans l'activité ou le fragment, on peut faire
fun updateView(data:Person){
with(data){
nameTextField.text = if(isMale){
"Mr. $name"
} else {
if(isMarried){
"Mrs. $name"
}else{
"Miss $name"
}
}
phoneTextField.text = phone
}
}
dans la liaison de données, vous devez faire
Android:text='@{person.isMale ? "Mr."+user.name: ((user.isMarried ? "Mrs. " : "Miss. ") + user.name)}'
Le code KTX est beaucoup plus propre que ce que vous avez à faire avec la liaison de données pour obtenir le même résultat. lorsque vous avez besoin de conditions pour définir des valeurs pour afficher la liaison de données devient moche. donc pour moi, Kotlin Android Les extensions fonctionnent mieux. J'aime mon code propre. vous pouvez toujours utiliser à la fois la décision qui vous appartient.