【问题标题】:Navigation error - This navigation graph is not referenced to any layout files?导航错误 - 此导航图未引用任何布局文件?
【发布时间】:2019-05-20 02:44:38
【问题描述】:

我正在尝试将navigation 功能应用于我的项目。

我有这个错误:

This navigation graph is not referenced to any layout files(expected to find it in at least one layout file with a NavHostFragment with app:navGraph="@navigation/@navigation" attribute
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation"
    android:label="fragment_init"
    app:startDestination="@id/initFragment"
    >

    <fragment
        android:id="@+id/initFragment"
        android:label="fragment_init"
        tools:layout="@layout/fragment_init">
        <action
            android:id="@+id/action_initFragment_to_authenticationFragment5"
            app:destination="@id/authenticationFragment"
            />
        <action
            android:id="@+id/action_initFragment_to_settingFragment3"
            app:destination="@id/settingFragment" />
    </fragment>
    <fragment
        android:id="@+id/authenticationFragment"
        android:name="com.example.AuthenticationFragment"
        android:label="fragment_authentication"
        tools:layout="@layout/fragment_authentication" />
    <fragment
        android:id="@+id/settingFragment"
        android:name="com.example.view.main.fragment.SettingFragment"
        android:label="SettingFragment"
        tools:layout="@layout/fragment_setting" />
</navigation>

我在这里和那里添加了该属性(导航和片段)。还有,在navigation.xml 中使用的layout 文件夹中的布局文件。但是没用。

这是activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:tint="#555"
    tools:context=come.example.view.main.MainActivity">

    <ImageView
        android:id="@+id/iv_flame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:navGraph="@navigation/navigation"/>
</RelativeLayout>

【问题讨论】:

  • 使用 fragmentcontainerview 也可以得到上述结果

标签: android android-navigation


【解决方案1】:

您没有正确设置您的&lt;fragment&gt; - 每个&lt;fragment&gt; 都需要一个android:name 指向它正在加载的Fragment 类。在导航的情况下,它必须按照Getting Start documentation 引用androidx.navigation.fragment.NavHostFragment

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

一旦您将导航图与NavHostFragment 关联起来,错误就会消失。

【讨论】:

  • 我已经添加了 android:name="androidx.navigation.fragment.NavHostFragment" 但我仍然收到完全相同的错误
  • 我注意到,即使如指南中所述,我已将 app:navGraph="@navigation/nav_graph" 添加到我的片段中,但属性 app:navGraph 实际上并不存在。我可以写它,但它永远不会出现在自动完成中 - 这意味着即使它在那里也没用......
  • @iamhanniballake &lt;fragmentcontainerview/&gt; 也给出了上述错误,所以我目前正在避免使用 fragmentcontainerview。有什么解决方案?
  • 我在 Android Studio 4.1 和 4.2 预览版中遇到了这个问题。恢复到 Android Studio 4.0 稳定版,一切正常。
【解决方案2】:

如果接受的答案最初不起作用,请尝试“制作项目”。为我工作&lt;fragment/&gt;

【讨论】:

    【解决方案3】:

    如果其他解决方案没有完全奏效,这对我有用,希望对其他人也有帮助

    特别是如果您使用 Kotlin,请检查您的依赖项是否具有相同的 Kotlin 版本(以及任何具有更新或通知或其他内容的内容),然后重建/同步,需要一些时间来加载,至少对于我似乎工作正常。

    *如果不起作用,请尝试使 catch/restart 无效,谁知道

    【讨论】:

      【解决方案4】:

      如果在应用接受的答案后仍然出现错误,请尝试此操作 - 我遇到了同样的错误,但我的活动正常。将依赖项从 android 更改为 androidx 后,错误消失了

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

      我也在 xml 布局中使用class 而不是android:name

      <fragment
          android:id="@+id/nav_host_fragment"
          class="androidx.navigation.fragment.NavHostFragment"
      

      【讨论】:

        【解决方案5】:

        虽然迟了,但希望有人会受益。我遇到过同样的问题。二手

        android:name="androidx.navigation.fragment.NavHostFragment" 
        app:navGraph="@navigation/mobile_navigation"
        

        。但仍然显示相同的错误。最后我通过查看 build.gradle 文件解决了我的问题。

        首先我的 gradle 文件是这样的:

        implementation "androidx.navigation:navigation-fragment:2.3.0-beta01"
        implementation "androidx.navigation:navigation-ui:2.3.0-beta01" 
        

        然后我在解决问题的依赖项中添加了这个额外的依赖项:

        implementation "androidx.navigation:navigation-dynamic-features-fragment:2.3.0-beta01"
        

        祝你好运。

        【讨论】:

          【解决方案6】:

          只需清理您的项目 Build-> 清理项目

          【讨论】:

            【解决方案7】:

            至少在我的情况下,造成这种情况的一个可能原因是拥有纵向和横向模式的布局文件,而忘记将androidx.navigation.fragment.NavHostFragment 视图添加到它们。将块添加到 layout-land/your_activity_layout.xml 使图形在 Android Studio 中正确显示。

            【讨论】:

              猜你喜欢
              • 2019-10-17
              • 2020-06-13
              • 1970-01-01
              • 2018-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-10
              相关资源
              最近更新 更多