Ich wollte eine neue Navigationsbibliothek ausprobieren. Nach folgendem dieser Richtlinie trat zur Laufzeit ein Fehler auf:
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
in der Ressourcendatei activity_home.xml
. Diese Datei ist sehr einfach:
<?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>
Ich habe mir den Quellcode von NavHostFragment
angesehen und festgestellt, dass er Android.support.v4.app.Fragment
verwendet, während meine Anwendung androidx.fragment.app.Fragment
verwendet.
Ich bin nicht überzeugt, dass es sich hierbei um das Problem handelt, aber ich möchte einige meiner Abhängigkeiten aufführen:
// 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"
Wie Sie sehen, verwende ich Bibliotheken von AndroidX mit Ausnahme der Navigation, da sie wahrscheinlich noch nicht migriert sind. Der einzige Ort bei Google, wo ich androidx.navigation
finden kann, ist hier . Leider kann Gradle es nicht herunterladen.
Bearbeiten
Ich habe auch ein Jetifier-Tool in meinem gradle.properties
aktiviert.
Android.enableJetifier=true
Android.useAndroidX=true
Update
Es ist in Android Studio 3.2 Canary 17 wie in diese Antwort erwähnt behoben. Vergessen Sie nicht, den Cache zu annullieren und neu zu starten, um Warnungen im Code zu entfernen.
Ja, wie von Levi Albuquerque erwähnt, ist dies ein bekannter Fehler in der neuesten Version von Canary Android Studio (14). Sie können über diesen Fehler abstimmen, ihn abonnieren und nützliche Informationen bereitstellen hier .
Update:
Das Problem wird in Android Gradle Plugin 3.2.0-alpha17 behoben
Anscheinend siehe hier und hier , die Verwendung des Jetifier und Android X ist noch unter Refactor. In diesem google i/o talk haben sie uns gebeten, auf Canary 15 zu warten hat einige Fehlerbehebungen.
Versuchen Sie, die Navigationsbibliothek vorerst mit der alten Supportbibliothek zu verwenden.
Bearbeiten: Android Studio 3.2 Canary 15 ist zum Download verfügbar, alles funktioniert gut für die Navigationsbibliothek. Nachdem Sie mit der Installation fertig sind, löschen Sie das Durcheinander und machen Sie den Cache ungültig.