Android启动Activity报错:无法实例化NavHostFragment类
错误日志
Process: com.ct07.ttn, PID: 8135 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ct07.ttn/com.ct07.ttn.MainActivity}: android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class androidx.fragment.app.FragmentContainerView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2958) ... 省略中间堆栈信息 Caused by: java.lang.ClassNotFoundException: NavHostFragment at java.lang.Class.classForName(Native Method) ... 省略中间堆栈信息 Caused by: java.lang.ClassNotFoundException: Didn't find class "NavHostFragment" on path: DexPathList[[zip file "/data/app/com.ct07.ttn-B923InpDx0Na9058GAIYtA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ct07.ttn-B923InpDx0Na9058GAIYtA==/lib/x86_64, /system/lib64, /system/vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) ... 省略剩余堆栈信息
相关代码
MainActivity.kt
package com.ct07.ttn import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import com.ct07.ttn.databinding.ActivityMainBinding import com.ct07.ttn.repository.RoomRepository import com.ct07.ttn.viewmodel.HomeViewModel import com.ct07.ttn.viewmodel.HomeViewModelProviderFactory class MainActivity : AppCompatActivity() { lateinit var homeViewModel: HomeViewModel lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val roomRepository = RoomRepository() val viewModelProviderFactory = HomeViewModelProviderFactory(application, roomRepository) homeViewModel = ViewModelProvider(this, viewModelProviderFactory).get(HomeViewModel::class.java) val navHostFragment = supportFragmentManager.findFragmentById(R.id.homeNavHostFragment) as NavHostFragment val navController = navHostFragment.navController binding.bottomNavigationView.setupWithNavController(navController) } }
activity_main.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=".MainActivity"> <FrameLayout android:id="@+id/flFragment" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <androidx.fragment.app.FragmentContainerView android:id="@+id/homeNavHostFragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:navGraph="@navigation/room_nav_graph" /> </FrameLayout> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigationView" android:layout_width="match_parent" android:layout_height="80dp" app:menu="@menu/bottom_navigation_menu" app:itemTextColor="@color/white" app:itemIconTint="@color/white" android:background="@color/purple_500" app:itemActiveIndicatorStyle="@style/App.Custom.Indicator" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
room_nav_graph.xml
<?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" android:id="@+id/room_nav_graph" app:startDestination="@id/homeFragment"> <fragment android:id="@+id/homeFragment" android:name="com.ct07.ttn.fragments.HomeFragment" android:label="HomeFragment" > <action android:id="@+id/action_homeFragment_to_roomFragment" app:destination="@id/roomFragment" /> </fragment> <fragment android:id="@+id/favoriteFragment" android:name="com.ct07.ttn.fragments.FavoriteFragment" android:label="FavoriteFragment" > <action android:id="@+id/action_favoriteFragment_to_roomFragment" app:destination="@id/roomFragment" /> </fragment> <fragment android:id="@+id/roomFragment" android:name="com.ct07.ttn.fragments.RoomFragment" android:label="RoomFragment" > <argument android:name="room" app:argType="com.ct07.ttn.models.Room" app:nullable="true" /> </fragment> </navigation>
解决方案
1. 添加Navigation组件依赖
打开模块级build.gradle(通常是app/build.gradle或app/build.gradle.kts),添加Navigation核心依赖:
// 版本请与项目中Jetpack组件版本匹配 implementation "androidx.navigation:navigation-fragment-ktx:2.7.6" implementation "androidx.navigation:navigation-ui-ktx:2.7.6"
添加后点击Sync Now同步项目。
2. 清理重建项目
- 执行
Build > Clean Project清理缓存 - 执行
Build > Rebuild Project重新编译 - 若问题依旧,尝试
File > Invalidate Caches...,勾选Invalidate and Restart重启Android Studio
3. 验证XML配置
- 确认
FragmentContainerView的android:name属性为完整包名androidx.navigation.fragment.NavHostFragment,无拼写错误 - 确认
app:navGraph指向的@navigation/room_nav_graph文件存在,且内部所有Fragment的android:name均为对应类的完整路径
4. 检查多Dex配置
若项目开启多Dex,确保NavHostFragment被包含在主Dex中,或添加以下配置:
android { defaultConfig { multiDexEnabled true } } implementation "androidx.multidex:multidex:2.0.1"
内容的提问来源于stack exchange,提问作者Lê Thanh Yến
相关产品推荐
相关产品推荐

