gpt4 book ai didi

android - 无法从 XML 访问 NavHostFragment

转载 作者:IT老高 更新时间:2023-10-28 13:45:50 26 4
gpt4 key购买 nike

我想尝试新的导航库。关注后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

更新

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

最佳答案

我也很头疼,因为我正在学习 https://codelabs.developers.google.com/codelabs/kotlin-android-training-add-navigation/index.html#3 上的 Android Kotlin 基础教程这是适合我的代码

<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。

关于android - 无法从 XML 访问 NavHostFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50333357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com