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


38

从以前的版本更新到Navigation 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>

3
使用的好处是FragmentContainerView什么?
IgorGanapolsky


@EugenPechanec为什么在拥有Jetpack Navigation时需要使用它?
IgorGanapolsky

@IgorGanapolsky好的问题,Jetpack Navigation在片段之间导航。片段转变(进入/退出动画)的行为不同,当片段在FragmentContainerView和以任何其他容器布局。差异在上面链接的FCV文档中进行了描述。基本上,FCV应该使转换工作的效果超出您的预期。或者,Jetpack导航取决于碎片。如果碎片被破坏,您将获得新的固定碎片库,或者等待依赖于新的固定碎片的新版本的Navigation。
Eugen Pechanec

@EugenPechanec我明白你的意思。但是,当Google明确提倡Jetpack Navigation专一使用时,我认为开发人员必须紧跟两个不同的API……
IgorGanapolsky

Answers:


13

重要!的不同版本存在一些已知问题FragmentContainerView。使用前请参阅变更日志。通读错误修复程序并使用该库的最新版本。


现在,您还应该声明对片段1.2.0-beta02的依赖性,因为它包含此用例的修复程序。

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

版本1.2.0-beta02

十月11,2019

Bug修复

修复了Fragment的onInflate()接收不到适当属性的问题FragmentContainerView,打破了诸如的情况NavHostFragment。(b / 142421837

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


6
该解决方案对我不起作用。
凌晨

@glend请准备一个最小的项目来复制该问题,并在官方问题跟踪器中报告该问题。谢谢!
Eugen Pechanec

11

NavigationBasicSample已更新至2.2.0-alpha01但依然采用了fragment标签。所述NavigationAdvancedSample示出了使用的FragmentContainerView,但NAV图表膨胀在代码(它们具有几个不同的图形)和相应的主机片段被添加到FragmentContainerView。因此,我想说,如果我们要自动充气,我们应该忽略该警告。


我在样本中也注意到了这一点。似乎添加最新的Fragment依赖项会处理lint警告。
几乎

为什么我们需要FragmentContainerView?
IgorGanapolsky

我在AdvancedSample中检查了代码。这只是让我呕吐!我不知道为什么Google团队必须以这种尴尬的方式创建和破坏事物。现在,我可能不得不复制扩展功能Today,但是这可能会再次破坏Tomorrow,并在导航库中进行了一些更新。真烂!
sud007
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.