Plus de code en synthétique !
Migrer de Kotlin synthetics vers ViewBinding
Vous vous rappelez encore de la fameuse méthode findViewById()
?
Bien sûr que oui, vous vous rappelez, comme tout autre développeur Android 😆.
Cette ennuyante époque ou vous êtes obligé de faire des appels findViewById()
plus d’un millier de fois dans une seule codebase.
ButterKnife en sauveur !
Début 2013, l’infatigable Jake Wharton annonça la première version de Butterknife, une librairie permettant de se débarrasser defindViewById()
en utilisant l’annotation @BindView
. ButterKnife restera pendant plus de 4 ans l’une des librairies populaires dans la communauté Android.
Kotlin et les extensions.
Après l’annonce par Google de Kotlin comme langage officiel pour le développement Android, Jetbrains a développé le plugin Gradle pour les extensions Android. Il apporte deux majeures avancées.
- Synthetics permet de remplacer les appels
findViewById
par le binding aveckotlinx.android.synthetic
. - Parcelize générer des objets Parcelables sans boilerplate avec une simple annotation:
@Parcelize
ViewBinding
Lors du Google I/O 2019, Google a annoncé ViewBinding
, une librairie permettant d’interagir plus facilement avec vos vues sans passer par les extensions, ni par la fameuse méthodefindViewById()
.
Ce tableau compare ViewBinding avec les autres méthodes d’accès aux vues.
En Novembre dernier, Google et Jetbrains ont annoncé conjointement avec la décision de déprécier kotlinx.android.synthetic
au détriment de ViewBinding qui devient donc officiellement l’option recommandé pour accéder aux vues dans votre code.
Migrer vers ViewBinding
Avant de commencer, si vous utilisez Parcelize dans votre code, changez le plugin kotlin.android.extensions
par le nouveau plugin autonomekotlinx.parcelize
qui contient uniquement l’implémentation Parcelable.
Pour migrer, rien de plus simple. Mettez l’option viewBinding sur true dans les modules ou vous voulez utilisez la librairie ViewBinding
android {
...
buildFeatures {
viewBinding true
}
}
Apres chaque build, une binding class est automatiquement générée pour chaque fichier layout contenu dans le module. Elle se présente sous le nom nomFichier suivi de Binding en notation camelCase.
Vous pouvez choisir d’exclure spécifiquement un fichier XML en déclaranttools:viewBindingIgnore="true"
.
Par exemple, pour le fichier layout user_profile.xml suivant
la binding class qui sera généré aura comme nom UserProfileBinding que vous pourrez utiliser comme suit:
et finalement pour accéder aux vues que ce soit dans une activité / fragment, il suffit de procéder comme suit
L’obsolescence a déjà commencée avec la version 1.4.20 de Kotlin (Novembre 2020) et prendra officiellement fin en septembre 2021. N’attendez plus, migrez vos codebases vers ViewBinding et débarrassez vous du code synthétique !
N’oubliez pas de partager et de suivre AndroidMood pour ne pas rater nos prochains articles.