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

App闪屏后HomeActivity因Fragment膨胀失败崩溃求助

解决HomeActivity启动时Fragment Inflate崩溃问题

崩溃日志

FATAL EXCEPTION: main
             Process: com.tapz.app, PID: 27735
             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tapz.app/com.tapz.app.ui.HomeActivity}: android.view.InflateException: Binary XML file line #21 in com.tapz.app:layout/activity_home: Binary XML file line #21 in com.tapz.app:layout/activity_home: Error inflating class fragment

核心排查方向与解决方案

1. 检查导航图配置

  • 打开res/navigation/mobile_navigation.xml,确认三个目标Fragment(navigation_home、navigation_dashboard、navigation_settings)的id与bottom_nav_menu.xml中的item id完全匹配
  • 验证每个Fragment的name属性指向正确的类路径,例如com.tapz.app.ui.home.HomeFragment
  • 确保导航图根标签navigation设置了正确的默认启动目标:app:startDestination="@id/navigation_home"

2. 修复NavHostFragment初始化逻辑

AndroidX Navigation在API 28及以下版本中,直接调用findNavController可能导致初始化异常,改用FragmentManager获取:

// 替换原有的findNavController代码
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_home) as NavHostFragment
val navController = navHostFragment.navController

3. 确保Fragment添加Hilt注解

由于HomeActivity使用了@AndroidEntryPoint,所有被托管的Fragment必须同样添加该注解才能正常使用Hilt依赖,示例:

@AndroidEntryPoint
class HomeFragment : Fragment() {
    // ...
}

4. 替换底部导航的手动监听逻辑

手动设置setOnNavigationItemSelectedListener容易引发重复导航或栈异常,改用Navigation组件自带的绑定方法:

// 配置AppBar,避免返回按钮异常
val appBarConfiguration = AppBarConfiguration(
    setOf(
        R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_settings
    )
)
setupActionBarWithNavController(navController, appBarConfiguration)

// 绑定底部导航与导航控制器
navView.setupWithNavController(navController)

5. 检查布局资源引用

  • 确认@drawable/chip_nav_item_bg、@drawable/menu_item_background、@style/BottomNavigationTextStyle等资源存在且无语法错误
  • 检查@menu/bottom_nav_menu中的每个item的id与导航图中Fragment的id完全一致(大小写敏感)

6. 清理重建项目

执行Build -> Clean Project,再执行Build -> Rebuild Project,清除编译缓存,解决资源编译异常问题

修改后的HomeActivity代码示例

package com.tapz.app.ui

import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.tapz.app.R
import com.tapz.app.databinding.ActivityHomeBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class HomeActivity : AppCompatActivity() {

    private lateinit var binding: ActivityHomeBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityHomeBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val navView: BottomNavigationView = binding.navView

        // 正确获取NavHostFragment与导航控制器
        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_home) as NavHostFragment
        val navController = navHostFragment.navController

        // 配置AppBar与底部导航
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_settings
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }
}

内容的提问来源于stack exchange,提问作者Sahar Batool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:17:01