FragmentContainerView mit Navigationskomponente verwenden?

Lesezeit: 4 Minuten

Nach dem Update auf Navigation 2.2.0-beta01 Aus der vorherigen Version warnt lint vor dem Ersetzen der <fragment> tag mit FragmentContainerView.

Das alleinige Ersetzen des Tags scheint jedoch zu verhindern, dass der Navigationsgraph aufgebläht wird.

Entsprechend 2.2.0-alpha01, FragmentContainerView wird intern verwendet. Sollten wir die Fusselwarnung 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>

  • Was ist der Vorteil der Verwendung FragmentContainerView?

    – IgorGanapolsky

    30. Januar 2020 um 23:52 Uhr

  • @IgorGanapolsky Siehe offizielle Dokumentation: developer.android.com/reference/androidx/fragment/app/…

    – Eugen Pechanec

    8. März 2020 um 14:19 Uhr

  • @EugenPechanec Warum brauchen wir das, wenn wir Jetpack-Navigation haben?

    – IgorGanapolsky

    8. März 2020 um 16:30 Uhr

  • @IgorGanapolsky Gute Frage, Jetpack Navigation navigiert zwischen Fragmenten. Fragment Übergänge (Enter/Exit-Animationen) verhalten sich anders, wenn die Fragmente drin sind FragmentContainerView und in jedem anderen Containerlayout. 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

    8. März 2020 um 16:45 Uhr

  • @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 eindeutig ausschließlich Jetpack-Navigation befürwortet hat …

    – IgorGanapolsky

    8. März 2020 um 17:08 Uhr

Benutzer-Avatar
Henrique Vasconcellos

Es gibt immer noch einen Fehler, der eine Ausnahme auslöst, wenn Sie einfach ersetzen Fragment zum . Die Lösung, ab sofort, wie von vielen Google-Ingenieuren in diesem angegeben Bug-Thread ist, Ihren Code in Ihrer Aktivität zu ändern:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

  • Jawohl! Nur 2 dieser Zeilen und meine gesamte Navigation funktioniert wieder, es ist keine weitere Änderung erforderlich

    – Alexey Simchenko

    16. September 2020 um 13:31 Uhr

  • Diese Antwort sollte mit der richtigen gemacht werden.

    – Lukas Orso

    22. Juni 2021 um 17:09 Uhr

  • das war hilfreich. tnx

    – mmdreza baqalpour

    29. Oktober 2021 um 13:51 Uhr

  • Dies ist die richtige Antwort

    – Raghav Satyadev

    16. März um 14:32 Uhr

Benutzer-Avatar
Eugen Pechanek

Wichtig! Es gibt bekannte Probleme mit verschiedenen Versionen von FragmentContainerView. Siehe die Änderungsprotokoll vor Gebrauch. Lesen Sie Fehlerkorrekturen durch und verwenden Sie eine aktuelle Version der Bibliothek.


Vorerst 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 Fragment onInflate() erhielt keine korrekten Attribute von FragmentContainerViewbrechen Fälle wie NavHostFragment. (b/142421837)

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

  • @glend Bitte bereiten Sie ein minimales Projekt vor, das das Problem reproduziert, und melden Sie es dem Beamten Issue-Tracker. Vielen Dank!

    – Eugen Pechanec

    27. Februar 2020 um 12:11 Uhr

Das NavigationBasicBeispiel wurde auf 2.2.0-alpha01 aktualisiert, verwendet aber immer noch die fragment Schild. Das NavigationAdvancedBeispiel zeigt die Verwendung der FragmentContainerViewaber das Navigationsdiagramm wird im Code aufgeblasen (sie haben mehrere verschiedene Diagramme) und das entsprechende Hostfragment wird hinzugefügt FragmentContainerView. Ich würde also sagen, dass wir zum jetzigen Zeitpunkt die Warnung ignorieren sollten, wenn wir eine automatische Inflation wollen.

  • Das ist mir bei den Proben auch aufgefallen. Es sieht so aus, als ob das Neueste hinzugefügt wird Fragment Die Abhängigkeit kümmert sich um die Flusenwarnung.

    Benutzer12194200

    13. Oktober 2019 um 3:28 Uhr

  • Warum brauchen wir FragmentContainerView?

    – IgorGanapolsky

    30. Januar 2020 um 23:53 Uhr

  • Ich habe den Code in AdvancedSample überprüft. Es bringt mich nur zum kotzen! Ich weiß nicht, warum das Team bei Google auf so umständliche Weise Dinge erstellen und zerstören muss. Jetzt muss ich vielleicht die Erweiterungsfunktion heute kopieren, aber das könnte morgen mit einem Update in der Navigationsbibliothek wieder kaputt gehen. Es ist einfach scheiße!!

    – sud007

    26. Februar 2020 um 8:25 Uhr


Benutzer-Avatar
Meysam Keshvari

mit Java

NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
                .findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();

1245340cookie-checkFragmentContainerView mit Navigationskomponente verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy