NavHostFragment против FragmentContainerView [Android] - PullRequest
0 голосов
/ 14 июля 2020

Привет, я просматриваю руководства по навигации на сайте Android разработчика и следую инструкциям по созданию NavHostFragment:

<fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"

        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

Однако, когда этот код есть, IDE предлагает заменить NavHostFragment на FragmentContainerView.

В чем разница и когда следует использовать каждый из них, а не другой?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

FragmentContainerView - это настраиваемый макет, разработанный специально как контейнер для фрагментов. NavHostFragment отвечает за замену мест назначения в компоненте навигации.

Вы можете использовать:

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:navGraph="@navigation/xxxxx"
    app:defaultNavHost="true"

    ..>

и:

val navController = findNavController(R.id.nav_host_fragment)

Или вы можете использовать:

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:navGraph="@navigation/xxxx"
    app:defaultNavHost="true"

    ..>

с:

    val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController = navHostFragment.navController
    
1 голос
/ 14 июля 2020

Если вы исследуете исходный код FragmentContainerView , вы обнаружите, что extends FrameLayout.

FragmentContainerView включает все функции, найденные в Framelayout , с некоторыми добавленными функциями в Fragment Transition и et c ..

Примечание. FragmentContainerView заменяет <FrameLayout> и <fragment>, но не NavHostFragment.

Чтобы узнать больше насчет FragmentContainerView, пожалуйста, проверьте эту статью .

Надеюсь, это поможет.

...