【问题标题】:Error inflating class Fragment, when adding navGraph attribute添加 navGraph 属性时,膨胀类 Fragment 时出错
【发布时间】:2020-07-02 20:00:21
【问题描述】:

我知道关于这个问题有几个问题和答案,但没有一个解决方案能解决我的问题。我得到一个

android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment

错误,当我使用导航 xml 文件添加 navGraph 属性时。


这是我的activity_login.xml(带有片段容器):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".LoginActivity">

<fragment
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:id="@+id/loginFragmentContainer"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:defaultNavHost="true"

    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"

    app:navGraph="@navigation/nav_graph"/>

</androidx.constraintlayout.widget.ConstraintLayout>

nav_graph.xml 与生成时一样为空。


以下是片段的重要依赖项:

implementation "androidx.navigation:navigation-fragment:2.3.0"
implementation "androidx.navigation:navigation-ui:2.3.0"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0"
implementation "androidx.navigation:navigation-dynamic-features-fragment:2.3.0"
androidTestImplementation "androidx.navigation:navigation-testing:2.3.0"
implementation "androidx.fragment:fragment:1.2.5"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0"

当我在我的 activity_login.xml -layout 中不包含此行 app:navGraph="@navigation/nav_graph" 时,我确实 not 收到错误。我的错误是什么?

我正在使用 Android Studio 4.1 Canary 10

请问我是否需要分享更多代码或信息... 提前致谢并致以最诚挚的问候!

【问题讨论】:

  • 当然在你的“res”目录里面有一个“navigation”目录?它包含 nav_graph.xml 文件,当您双击时,它会在 android IDE 中正确加载?
  • 你的nav_graph.xml真的是空的吗?这根本行不通——你需要在使用它之前实际添加一个目的地。请包括它和您收到的错误消息。
  • @DavidKroukamp ,是的,有这个目录,它在 Ctrl+Left-Click 上正确加载
  • @ianhanniballake ,这个 xml 的“代码”只是标准代码——没有目的地或任何东西。我需要实施吗?我没有使用 thode NavGraphs 的经验,但是当我第一次必须这样做时,我知道从哪里开始。 schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto" android:id="@+id/nav_graph">
  • 错误消息应该明确说明您需要一个 startDestination,所以是的,您需要添加其中之一 :) 听起来像通过 Getting Started guideNavigation codelab 可能会有所帮助。跨度>

标签: android xml android-layout android-fragments android-navigation-graph


【解决方案1】:

更新到“androidx.appcompat:appcompat:1.4.0”后,我收到了同样的错误。

对我有用的是改变:

  • 在活动布局xml文件中从&lt;fragment节点到&lt;androidx.fragment.app.FragmentContainerView

之前

<fragment
    android:id="@+id/navHostFragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
...
    app:navGraph="@navigation/nav_graph"/>

之后

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/navHostFragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
...
    app:navGraph="@navigation/nav_graph"/>
  • 在活动类文件中如何初始化navController

之前

        navController = findNavController(R.id.navHostFragment)

之后

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

【讨论】:

    【解决方案2】:

    您的导航图需要至少有一个目的地 - 您的图表的起始目的地和当您按照 Getting Started guide 扩充图表时用户看到的第一个屏幕。

    【讨论】:

      【解决方案3】:

      要导航,只需要实现两个依赖:

      implementation "android.arch.navigation:navigation-fragment-ktx:$version_navigation"
      implementation "android.arch.navigation:navigation-ui-ktx:$version_navigation"
      

      请分享您的 nav_graph.xml

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        • 2019-11-29
        • 2017-02-28
        • 2021-07-10
        • 2020-08-01
        • 2016-02-28
        相关资源
        最近更新 更多