Je voulais essayer une nouvelle bibliothèque de navigation. Après avoir suivi cette directive j'ai rencontré une erreur au moment de l'exécution:
Caused by: Android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment
Caused by: Android.view.InflateException: Binary XML file line #11: Error inflating class fragment
Caused by: Android.app.Fragment$InstantiationException: Unable to instantiate fragment androidx.navigation.fragment.NavHostFragment: make sure class name exists, is public, and has an empty constructor that is public
dans le fichier de ressources activity_home.xml
. Ce fichier est très simple:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".ui.home.HomeActivity">
<fragment
Android:id="@+id/fragment_navigation_Host"
Android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation_home" />
</FrameLayout>
J'ai regardé le code source de NavHostFragment
et j'ai remarqué qu'il utilise Android.support.v4.app.Fragment
tandis que l'ensemble de mon application utilise androidx.fragment.app.Fragment
.
Je ne suis pas convaincu que ce soit le problème, mais j'inclus ci-dessous certaines de mes dépendances:
// AndroidX
implementation "androidx.appcompat:appcompat:$appCompatVersion"
implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion"
implementation "androidx.recyclerview:recyclerview:$recyclerViewVersion"
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-rxjava2:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
// Navigation
implementation "Android.Arch.navigation:navigation-fragment-ktx:$navigationVersion"
implementation "Android.Arch.navigation:navigation-ui-ktx:$navigationVersion"
Comme vous pouvez le constater, j'utilise les bibliothèques d'AndroidX sauf Navigation, car ce n'est probablement pas encore migré. Le seul endroit sur Google où je peux trouver androidx.navigation
est ici . Malheureusement, Gradle ne parvient pas à le télécharger.
Modifier
J'ai également un outil de jetifier activé dans mon gradle.properties
.
Android.enableJetifier=true
Android.useAndroidX=true
Mise à jour
Il est corrigé dans Android Studio 3.2 Canary 17 comme indiqué dans cette réponse . N'oubliez pas d'invalider le cache et de redémarrer afin de supprimer les avertissements dans le code.
Oui, comme l'a mentionné Levi Albuquerque, il s'agit d'un bogue connu dans la dernière version de Canary Android Studio (14). Vous pouvez voter sur ce bogue, vous abonner et fournir des informations utiles ici .
Mise à jour:
Le problème sera corrigé dans le plugin Android Gradle 3.2.0-alpha17
Apparemment, voir ici et ici , l'utilisation de Jetifier et d'Android X est toujours en cours de refactorisation. Dans cette conversation google i/o qu'ils nous ont demandée attendre Canary 15 qui a quelques corrections de bugs.
Essayez d'utiliser la bibliothèque de navigation avec l'ancienne bibliothèque de support pour l'instant.
Edit: Android Studio 3.2 Canary 15 est disponible au téléchargement, tout fonctionne correctement pour la bibliothèque de navigation. Une fois que vous avez terminé l’installation, éliminez le fouillis qui empêche le cache de vérifier si tout se passe bien.