Используя FragmentContainerView с компонентом навигации?

38

После обновления до предыдущей версии Navigation 2.2.0-beta01 lint выдает предупреждение о замене <fragment>тега на FragmentContainerView.

Однако замена одного тега, по-видимому, предотвращает раздувание графика навигации.

Согласно 2.2.0-alpha01 , FragmentContainerViewиспользуется внутри страны. Должны ли мы игнорировать предупреждение Lint?


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>
nearlySane
источник
3
В чем преимущество использования FragmentContainerView?
Игорь Ганапольский
@IgorGanapolsky См. Официальную документацию: developer.android.com/reference/androidx/fragment/app/…
Евгений Печанец
@EugenPechanec Зачем нам это нужно, когда у нас есть Jetpack Navigation?
Игорь Ганапольский
@IgorGanapolsky Хороший вопрос, Jetpack Navigation перемещается между фрагментами. Фрагмент переходы (вход / выход анимации) ведут себя по- разному , когда фрагменты находятся в FragmentContainerViewи в любой другой компоновке контейнера. Различия описаны в документации FCV, указанной выше. По сути, FCV должен заставить переходы работать лучше, чем вы ожидаете. Или Jetpack Navigation зависит от фрагментов. Если фрагменты повреждены, вы получаете новую библиотеку фиксированных фрагментов или ждете новую версию навигации, которая зависит от новых фиксированных фрагментов.
Евгений Печанец
@EugenPechanec Я понимаю, что вы говорите. Тем не менее, я думаю, что разработчикам неудобно идти в ногу с двумя разными API, когда Google явно выступает исключительно за Jetpack Navigation ...
IgorGanapolsky

Ответы:

13

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


На данный момент вы также должны объявить зависимость от Fragment 1.2.0-beta02, поскольку он содержит исправление для этого варианта использования.

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

Версия 1.2.0-бета02

11 октября 2019 г.

Исправление ошибок

Исправлена ​​ошибка, из-за которой Fragment onInflate()не получал надлежащие атрибуты FragmentContainerView, такие как NavHostFragment. ( б / 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. Поэтому я бы сказал, что в настоящее время мы должны игнорировать предупреждение, если мы хотим автоматическую инфляцию.

dmapr
источник
Я заметил это и в примерах. Похоже, что добавление последней Fragmentзависимости заботится о предупреждении lint.
почти
Зачем нам нужен FragmentContainerView?
Игорь Ганапольский
Я проверил код в AdvancedSample. Меня просто тошнит! Я не знаю, почему команда в Google должна создавать и ломать вещи так неловко. Теперь мне, возможно, придется скопировать функцию расширения Сегодня, но это может снова сломать Завтра с некоторым обновлением в библиотеке навигации. Это просто отстой !!
sud007