与导航组件一起使用 FragmentContainerView? ?

在从以前的版本更新到导航 2.2.0-beta01之后,lint 提示将 <fragment>标记替换为 FragmentContainerView

但是,单独替换标记似乎可以防止导航图膨胀。

根据 2.2.0-alpha01FragmentContainerView是内部使用的。我们应该忽略皮棉警告吗?


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>
40414 次浏览

NavigationBasicSample已经更新为2.2.0-alpha01,但仍然使用 fragment标记。NavigationAdvancedSample显示了 FragmentContainerView的使用,但是导航图在代码中被膨胀(它们有几个不同的图) ,并且相应的主机片段被添加到 FragmentContainerView中。所以我想说,在这个时候,如果我们想要自动通货膨胀,我们应该忽略这个警告。

重要!不同版本的 FragmentContainerView存在已知的问题。使用前请参阅 更改日志。通读 bug 修复并使用库的最新版本。


现在,您还应该声明对片段1.2.0-beta02的依赖关系,因为它包含了对这个用例的修复。

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

版本1.2.0-beta02

2019年10月11日

修复漏洞

修正了片段的 onInflate()没有从 FragmentContainerView接收到正确属性的问题,破坏了例如 NavHostFragment的情况

资料来源: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02

如果只是简单地将 碎片替换为 < androidx.Fragment.app. FragmentContainerView > ,仍然会有一个 bug 引发异常。从现在开始,正如许多谷歌工程师在这个 虫线中所说的那样,修正是在你的活动中改变你的代码:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

使用 Java

NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
.findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();