Używasz FragmentContainerView ze składnikiem Nawigacji?


38

Po aktualizacji do Nawigacji 2.2.0-beta01 z poprzedniej wersji lint wyświetla ostrzeżenie o zamianie <fragment>tagu na FragmentContainerView.

Jednak sama wymiana znacznika wydaje się zapobiegać zawyżeniu wykresu nawigacyjnego.

Według 2.2.0-alpha01 , FragmentContainerViewjest stosowany wewnętrznie. Czy powinniśmy zignorować ostrzeżenie o kłaczkach?


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>

3
Jaka jest zaleta korzystania FragmentContainerView?
IgorGanapolsky

@IgorGanapolsky Zobacz oficjalną dokumentację: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec

@EugenPechanec Dlaczego potrzebujemy tego, gdy mamy Jetpack Navigation?
IgorGanapolsky

@IgorGanapolsky Dobre pytanie, nawigacja Jetpack nawiguje między fragmentami. Przejścia fragmentów (animacje wejścia / wyjścia) zachowują się inaczej, gdy fragmenty znajdują się FragmentContainerVieww dowolnym innym układzie kontenera. Różnice opisano w dokumentacji FCV, do której link znajduje się powyżej. Zasadniczo FCV ma sprawić, że przejścia będą działać tak, jak można się spodziewać. Lub Jetpack Navigation zależy od fragmentów. Jeśli fragmenty są zepsute, otrzymujesz nową naprawioną bibliotekę fragmentów lub czekasz na nową wersję Nawigacji, która zależy od nowych ustalonych fragmentów.
Eugen Pechanec

@EugenPechanec Rozumiem, co mówisz. Myślę jednak, że niedogodnością dla programistów jest nadążanie za dwoma różnymi interfejsami API, gdy Google wyraźnie opowiada się wyłącznie za Jetpack Navigation ...
IgorGanapolsky

Odpowiedzi:


13

Ważny! Znane są problemy z różnymi wersjami FragmentContainerView. Zobacz dziennik zmian przed użyciem. Przeczytaj poprawki błędów i skorzystaj z najnowszej wersji biblioteki.


Na razie powinieneś również zadeklarować zależność od Fragmentu 1.2.0-beta02, ponieważ zawiera on poprawkę do tego przypadku użycia.

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

Wersja 1.2.0-beta02

11 października 2019 r

Poprawki błędów

Naprawiono błąd, w wyniku którego Fragmenty onInflate()nie otrzymywały odpowiednich atrybutów FragmentContainerView, rozbijając przypadki, takie jak NavHostFragment. ( b / 142421837 )

Źródło: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02


6
To rozwiązanie nie działało dla mnie.
glend

@glend Przygotuj minimalny projekt, który odtwarza problem i zgłoś go na oficjalnym narzędziu do śledzenia problemów . Dzięki!
Eugen Pechanec

11

NavigationBasicSample został zaktualizowany do 2.2.0-alpha01 ale nadal jest za pomocą fragmentznacznika. TheNavigationAdvancedSample przedstawia korzystania z FragmentContainerView, ale wykres NAV nadmuchany w zbiorze (mają kilka różnych wykresów) i odpowiedniego fragmentu gospodarza dodano do FragmentContainerView. Powiedziałbym więc, że powinniśmy zignorować to ostrzeżenie, jeśli chcemy automatycznej inflacji.


Zauważyłem to również w próbkach. Wygląda na to, że dodanie najnowszej Fragmentzależności zajmuje ostrzeżenie o strzępach.
prawie Szalony

Dlaczego potrzebujemy FragmentContainerView?
IgorGanapolsky

Sprawdziłem kod w AdvancedSample. To tylko sprawia, że ​​wymiotuję! Nie wiem, dlaczego zespół Google musi tworzyć i łamać rzeczy w tak niezręczny sposób. Teraz może będę musiał skopiować funkcję rozszerzenia Dzisiaj, ale może to znowu uszkodzić Jutro z pewną aktualizacją w bibliotece nawigacji. To po prostu do bani !!
sud007
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.