wake-up-neo.com

Auf NavHostFragment kann nicht aus XML zugegriffen werden

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.

5
Nominalista

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

2
Ilosqu

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. 

1
Levi Moreira