我想尝试新的导航库。在执行this guideline之后,我在运行时遇到错误:
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,因为它可能还没有迁移。在Google上唯一可以找到androidx.navigation
的地方是here。Gradle无法下载。
编辑
我还在我的gradle.properties
中启用了jetifier工具。
android.enableJetifier=true
android.useAndroidX=true
型
更新
它在Android Studio 3.2 Canary 17中得到修复,如this answer中所述。不要忘记使缓存无效并重新启动以删除代码中的警告。
8条答案
按热度按时间jhdbpxl91#
我也有这个头痛,因为我在https://codelabs.developers.google.com/codelabs/kotlin-android-training-add-navigation/index.html#3上遵循AndroidKotlin基础教程,下面是对我有用的代码
字符串
显然,教程没有更新。另外在依赖项中需要更新库..
型
我正在使用Android Studio 4.0。
mzmfm0qo2#
NavHostFragment
无法访问?android:name="androidx.navigation.fragment.NavHostFragment
个所以在
build.gradle
中,只需添加这两个依赖项-对于Java:-
字符串
对于Kotlin:-
型
参考链接:-https://developer.android.com/jetpack/androidx/releases/navigation
z8dt9xmd3#
是的,正如Levi阿尔伯克基所提到的,这是最新的Canary Android Studio版本(14)中的一个已知错误。您可以投票给这个bug,订阅并提供一些有用的信息here。
更新:
问题将在Android Gradle插件3.2.0-alpha 17中修复
ojsjcaue4#
显然,参见here和here,Jetier和Android X的使用仍在重构中,在这个google i/o演讲中,他们要求我们等待金丝雀15,其中有一些错误修复。
现在尝试使用导航库和旧的支持库。
**编辑:**Android Studio 3.2 Canary 15可供下载,导航库一切正常。安装完成后,请清理混乱,该高速缓存无效,看看它是否正常。
e5njpo685#
对我来说,这是一个奇怪的Android Studio错误;而
NavHostFragment
直到以下情况才被解析:NavHostFragment
导入import androidx.navigation.fragment.NavHostFragment
xoefb8l86#
在导航文件夹下,有一个名为
nav_graph.xml
的XML文件。打开它,它会提示Gradle同步。项目树
的数据
lawou6xi7#
从Android Developers添加依赖项帮助了我:
字符串
9gm1akwq8#
对我来说,上面的答案都不起作用。
字符串
你需要像这样找到导航控制器。