Verwenden Sie FragmentContainerView mit der Navigationskomponente?

38

Nach dem Update auf Navigation 2.2.0-beta01 von der vorherigen Version gibt lint eine Warnung zum Ersetzen des <fragment>Tags durch aus FragmentContainerView.

Das Ersetzen des Tags allein scheint jedoch zu verhindern, dass das Navigationsdiagramm aufgeblasen wird.

Nach 2.2.0-alpha01 , FragmentContainerViewwird intern verwendet. Sollten wir die Flusenwarnung ignorieren?


activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Lint warning: "Replace the <fragment> tag with FragmentContainerView. -->
    <fragment
        android:id="@+id/nav_host_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph_main"/>

    <!-- other elements -->

</androidx.constraintlayout.widget.ConstraintLayout>
fast gesund
quelle
3
Was ist der Vorteil der Verwendung FragmentContainerView?
IgorGanapolsky
@IgorGanapolsky Siehe offizielle Dokumentation: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec
@EugenPechanec Warum brauchen wir das, wenn wir Jetpack Navigation haben?
IgorGanapolsky
@IgorGanapolsky Gute Frage, Jetpack Navigation navigiert zwischen Fragmenten. Fragment Übergänge (Eingabe / Exit Animationen) verhalten sich anders , wenn die Fragmente in sind FragmentContainerViewund in jedem anderen Behälter Layout. Die Unterschiede sind in der oben verlinkten FCV-Dokumentation beschrieben. Grundsätzlich soll FCV dafür sorgen, dass Übergänge besser funktionieren, als Sie es erwarten würden. Oder die Jetpack-Navigation hängt von Fragmenten ab. Wenn Fragmente beschädigt sind, erhalten Sie eine neue Bibliothek mit festen Fragmenten oder warten auf eine neue Version der Navigation, die von neuen festen Fragmenten abhängt.
Eugen Pechanec
@ EugenPechanec Ich verstehe, was du sagst. Ich halte es jedoch für ein Ärgernis für Entwickler, mit zwei verschiedenen APIs Schritt zu halten, wenn Google sich eindeutig ausschließlich für Jetpack Navigation
ausgesprochen hat

Antworten:

13

Wichtig! Es sind Probleme mit verschiedenen Versionen von bekannt FragmentContainerView. Lesen Sie vor der Verwendung das Änderungsprotokoll . Lesen Sie die Fehlerbehebungen durch und verwenden Sie eine aktuelle Version der Bibliothek.


Im Moment sollten Sie auch die Abhängigkeit von Fragment 1.2.0-beta02 deklarieren, da es einen Fix für diesen Anwendungsfall enthält.

implementation "androidx.fragment:fragment:1.2.0-beta02"

Version 1.2.0-beta02

11. Oktober 2019

Fehlerbehebung

Es wurde ein Problem behoben, bei dem Fragmente onInflate()keine richtigen Attribute von erhalten haben FragmentContainerView, wodurch Fälle wie z NavHostFragment. ( b / 142421837 )

Quelle: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02

Eugen Pechanec
quelle
6
Diese Lösung hat bei mir nicht funktioniert.
Glend
@glend Bitte bereiten Sie ein minimales Projekt vor, das das Problem reproduziert, und melden Sie es im offiziellen Issue-Tracker . Vielen Dank!
Eugen Pechanec
11

Das NavigationBasicSample wurde auf 2.2.0-alpha01 aktualisiert, verwendet jedoch weiterhin das fragmentTag. Das NavigationAdvancedSample zeigt die Verwendung von FragmentContainerView, aber das Navigationsdiagramm wird im Code aufgeblasen (sie haben mehrere verschiedene Diagramme) und das entsprechende Hostfragment wird dem hinzugefügt FragmentContainerView. Daher würde ich zu diesem Zeitpunkt sagen, wir sollten die Warnung ignorieren, wenn wir eine automatische Inflation wollen.

dmapr
quelle
Das habe ich auch in den Proben bemerkt. Es sieht so aus, als würde sich das Hinzufügen der neuesten FragmentAbhängigkeit um die Flusenwarnung kümmern.
Fast gesund
Warum brauchen wir FragmentContainerView?
IgorGanapolsky
Ich habe den Code in AdvancedSample überprüft. Ich muss mich nur übergeben! Ich weiß nicht, warum das Team bei Google Dinge so umständlich erstellen und brechen muss. Jetzt muss ich möglicherweise die Erweiterungsfunktion Heute kopieren, aber dies könnte morgen mit einem Update in der Navigationsbibliothek erneut unterbrochen werden. Es ist einfach nur beschissen !!
sud007