11

我想尝试新的导航库。遵循此指南后,我在运行时遇到错误:

Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment androidx.navigation.fragment.NavHostFragment: make sure class name exists, is public, and has an empty constructor that is public

在资源文件中activity_home.xml。这个文件很简单:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    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/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.home.HomeActivity">

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

</FrameLayout>

我查看了的源代码,NavHostFragment我注意到它android.support.v4.app.Fragment在我的整个应用程序使用时使用androidx.fragment.app.Fragment

我不相信这是问题所在,但我在下面包含了我的一些依赖项:

// AndroidX
implementation     "androidx.appcompat:appcompat:$appCompatVersion"
implementation     "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
implementation     "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion"
implementation     "androidx.recyclerview:recyclerview:$recyclerViewVersion"
implementation     "androidx.room:room-runtime:$roomVersion"
implementation     "androidx.room:room-rxjava2:$roomVersion"

kapt               "androidx.room:room-compiler:$roomVersion"

// Navigation
implementation     "android.arch.navigation:navigation-fragment-ktx:$navigationVersion"
implementation     "android.arch.navigation:navigation-ui-ktx:$navigationVersion"

如您所见,我正在使用 AndroidX 中的库,但 Navigation 除外,因为它可能尚未迁移。谷歌上我能找到的唯一地方androidx.navigation就是这里。不幸的是,Gradle 无法下载它。

编辑

我的gradle.properties.

android.enableJetifier=true
android.useAndroidX=true

更新

如本答案所述,它已在 Android Studio 3.2 Canary 17 中修复。不要忘记使缓存无效并重新启动以删除代码中的警告。

4

7 回答 7

6

我也很头疼,因为我正在关注https://codelabs.developers.google.com/codelabs/kotlin-android-training-add-navigation/index.html#3上的 Android Kotlin Fundamental 教程 这是有效的代码为了我

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

显然教程没有更新。另外在依赖中需要更新库..

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

我正在使用 Android Studio 4.0。

于 2020-08-01T06:56:47.433 回答
4

是的,正如 Levi Albuquerque 所提到的,这是最新 Canary Android Studio 版本 (14) 中的一个已知错误。您可以在这里投票、订阅并提供一些有用的信息。

更新:

问题将在 Android Gradle 插件 3.2.0-alpha17 中修复

于 2018-05-17T07:09:15.090 回答
4

NavHostFragment不可访问?android:name="androidx.navigation.fragment.NavHostFragment

所以在你的build.gradle,只需添加这两个依赖项 -

对于 Java:-

dependencies {
def nav_version = "2.3.0"

implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

}

对于科特林:-

dependencies {
def nav_version = "2.3.0"

implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

}

参考链接:- https://developer.android.com/jetpack/androidx/releases/navigation

于 2020-01-30T04:10:15.230 回答
1

显然,看到这里这里,Jetifier 和 Android X 的使用仍在重构中,在这个谷歌 i/o谈话中,他们要求我们等待有一些错误修复的 Canary 15。

现在尝试将导航库与旧的支持库一起使用。

编辑: Android Studio 3.2 Canary 15 可供下载,导航库一切正常。完成安装后,清除使缓存无效的混乱情况,看看它是否正常。

于 2018-05-16T12:15:00.233 回答
0

在导航文件夹下,有一个名为nav_graph.xml. 打开它,它会提示 Gradle 同步。

项目树

于 2020-01-02T23:48:59.547 回答
0

添加来自Android 开发人员的依赖项帮助了我:

dependencies {
   def nav_version = "2.3.0-rc01"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Dynamic Feature Module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"
}
于 2020-06-16T09:53:58.210 回答
0

对我来说,这是一个奇怪的 Android Studio 错误。直到NavHostFragment

  • Invlidate Caches and Restart >> 仍然没有解决
  • 手动添加NavHostFragment导入import androidx.navigation.fragment.NavHostFragment
于 2021-08-26T20:40:37.987 回答