FragmentContainerView 和 app:navGraph - 此导航图未引用任何布局文件

Posted

技术标签:

【中文标题】FragmentContainerView 和 app:navGraph - 此导航图未引用任何布局文件【英文标题】:FragmentContainerView and app:navGraph - This navigation graph is not referenced to any layout files 【发布时间】:2020-06-13 15:09:04 【问题描述】:

为了防止在升级到最新片段(1.2.2 版本)和导航(2.2.1 版本)后出现 Lint 警告(将 fragment 替换为 FragmentContainerView),我将片段替换为 FragmentContainerView

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

但在那之后我在@navigation/nav_graph 中发现了错误 - 此导航图未引用任何布局文件

一切正常,但那个错误很烦人。

【问题讨论】:

看起来我们只需要忽略此错误,因为我在 github.com/android/architecture-components-samples/tree/master/… 上看到导航图的相同错误 您使用的是什么版本的 Android Studio? @ianhanniballake 我正在使用最新的稳定版 => AS 3.6.0 和 3.6.1 这能回答你的问题吗? Using FragmentContainerView with Navigation component? @Rule,不幸的是,没有帮助。 【参考方案1】:

有相同的“错误”警告,似乎它将在未来的版本中修复。同时,正如 Android Studio 建议的那样,可以使用以下命令安全地忽略警告:

<navigation
    ...
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="UnusedNavigation" />

【讨论】:

【参考方案2】:

我有同样的错误,但是该应用程序可以正常编译并且可以正常工作。我想我们必须等待下一个稳定版本中的修复。

【讨论】:

【参考方案3】:

您需要在 build.gradle(app) 中更新到最新版本的 navigation-fragment-ktx

def nav_version = "2.3.0-alpha03"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

【讨论】:

【参考方案4】:

这可能是我理解错了,但如果一切正常,这可能是 Android Studio 需要一些缓存清除和重新启动的典型案例。甚至可以从您的项目中手动删除构建文件夹。

【讨论】:

不,我尝试了 clean/sync gradle/refresh/invalidate 等。只有当我将 FragmentContainerView 恢复为 Fragment 时,错误才会消失。看起来经典的谷歌因“稳定”库而失败:) 现在,我只是用工具抑制错误:ignore="UnusedNavigation"

以上是关于FragmentContainerView 和 app:navGraph - 此导航图未引用任何布局文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 androidx.fragment.app.FragmentContainerView 时出现 ClassNotFoundException

片段不使用 FragmentContainerView 切换

FragmentContainerView 中未调用/显示 OnMapReady

膨胀类android.fragment.app.FragmentContainerView时出错,有人可以告诉我我缺少啥

在我的 FragmentContainerView 对象中找不到方法 getFragment()

将 <fragment> 标签替换为 FragmentContainerView