Search code examples
androidandroid-layout

Using FragmentContainerView with Navigation component?


After updating to Navigation 2.2.0-beta01 from the previous version, lint gives a warning about replacing the <fragment> tag with FragmentContainerView.

However, replacing the tag alone seems to prevent the navigation graph from being inflated.

According to 2.2.0-alpha01, FragmentContainerView is used internally. Should we ignore the lint warning?


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>

Solution

  • Important! There are known issues with different versions of FragmentContainerView. See the changelog before using. Read through bug fixes and use a recent version of the library.


    For now, you should also declare dependency on Fragment 1.2.0-beta02 as it includes a fix for this use case.

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

    Version 1.2.0-beta02

    October 11, 2019

    Bug fixes

    Fixed an issue where Fragment's onInflate() did not receive proper attributes from FragmentContainerView, breaking cases such as NavHostFragment. (b/142421837)

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