NavHostFragment 与 FragmentContainerView [Android]
NavHostFragment vs FragmentContainerView [Android]
您好,我正在阅读开发人员 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
。
有什么区别,什么时候应该分别使用它们而不是另一个?
谢谢
如果您探索 FragmentContainerView 的源代码,您会发现它 extends FrameLayout。
FragmentContainerView 包含 Framelayout 中的所有功能,以及片段过渡等中的一些新增功能。
注意:FragmentContainerView 替换了 <FrameLayout>
和 <fragment>
而不是 NavHostFragment。
要了解更多有关 FragmentContainerView 的信息,请查看 this article。
希望对您有所帮助。
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
您好,我正在阅读开发人员 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
。
有什么区别,什么时候应该分别使用它们而不是另一个?
谢谢
如果您探索 FragmentContainerView 的源代码,您会发现它 extends FrameLayout。
FragmentContainerView 包含 Framelayout 中的所有功能,以及片段过渡等中的一些新增功能。
注意:FragmentContainerView 替换了 <FrameLayout>
和 <fragment>
而不是 NavHostFragment。
要了解更多有关 FragmentContainerView 的信息,请查看 this article。
希望对您有所帮助。
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