Використання FragmentContainerView з компонентом навігації?


38

Після оновлення до Навігації 2.2.0-beta01 з попередньої версії lint надсилає попередження про заміну <fragment>тегу на FragmentContainerView.

Однак, заміняючи лише тег, схоже, запобігає завищення графіку навігації.

Відповідно до 2.2.0-alpha01 , FragmentContainerViewвикористовується внутрішньо. Чи слід ігнорувати попередження про підошву?


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
У чому перевага використання FragmentContainerView?
ІгорГанапольський

@IgorGanapolsky Дивіться офіційну документацію: developer.android.com/reference/androidx/fragment/app/…
Євген Печанець

@EugenPechanec Навіщо нам це потрібно, коли у нас є навігація Jetpack?
ІгорГанапольський

@IgorGanapolsky Добре запитання, навігація Jetpack переходить між фрагментами. Переходи фрагментів (анімація введення / виходу) ведуть себе по-різному, коли фрагменти знаходяться FragmentContainerViewв будь-якому іншому макеті контейнера. Відмінності описані в документації FCV, пов'язаній вище. В основному, FCV повинен змусити переходи працювати більше, як ви очікували. Або навігація Jetpack залежить від фрагментів. Якщо фрагменти порушені, ви отримуєте нову бібліотеку фіксованих фрагментів або чекаєте нової версії навігації, яка залежить від нових фіксованих фрагментів.
Євген Печанець

@EugenPechanec Я розумію, що ти кажеш. Однак я думаю, що розробникам неприємно йти в ногу з двома різними API, коли Google чітко виступає за навігацію Jetpack Navigation ...
IgorGanapolsky

Відповіді:


13

Важливо! Відомі проблеми з різними версіями FragmentContainerView. Перегляньте журнал змін перед використанням. Прочитайте виправлення помилок та використовуйте останню версію бібліотеки.


Наразі вам слід також оголосити залежність від фрагмента 1.2.0-beta02, оскільки він містить виправлення для цього випадку використання.

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

Версія 1.2.0-beta02

11 жовтня 2019 року

Виправлення помилок

Виправлена ​​проблема, коли фрагменти onInflate()не отримували належних атрибутів FragmentContainerView, порушуючи такі випадки, як NavHostFragment. ( b / 142421837 )

Джерело: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02


6
Це рішення не спрацювало для мене.
глед

@glend Будь ласка, підготуйте мінімальний проект, який відтворює проблему, та повідомте про це в офіційному трекері випусків . Дякую!
Євген Печанець

11

NavigationBasicSample оновлений до 2.2.0-alpha01 , але по - , як і раніше з допомогою fragmentтега. NavigationAdvancedSample показує використання FragmentContainerView, але нав граф надувається в коді (вони мають кілька різних графіків) і відповідний фрагмент хоста додається до FragmentContainerView. Тому я б сказав, що в цей час ми повинні ігнорувати попередження, якщо хочемо автоматичної інфляції.


Я це помітив і в зразках. Схоже, додавання останньої Fragmentзалежності переймається попередженням про ворсинки.
майжеСане

Для чого нам потрібен FragmentContainerView?
ІгорГанапольський

Я перевірив код у AdvancedSample. Це просто змушує мене блювати! Я не знаю, чому команда в Google повинна створювати та ламати речі настільки незручно. Тепер мені, можливо, доведеться скопіювати функцію розширення Сьогодні, але це може знову зламати Завтра з деяким оновленням у навігаційній бібліотеці. Це просто смокче !!
sud007
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.