You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android启动Activity报错:无法实例化NavHostFragment类

底部标签页App启动崩溃: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:45:56