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

使用Navigation Component时应用崩溃,FragmentContainerView无法加载

解决Navigation Component加载FragmentContainerView崩溃问题

问题概述

使用Navigation Component时应用启动崩溃,无法正确加载FragmentContainerView,替换为<fragment>标签后问题仍存在。错误日志核心为java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context androidx.fragment.app.FragmentHostCallback.getContext()' on a null object reference。

解决方案

1. 调整MainActivity中视图初始化顺序

错误根源在于视图绑定初始化早于Activity的核心初始化流程,导致FragmentContainerView无法获取有效的上下文环境。需将super.onCreate(savedInstanceState)移至binding.inflate之前:

修改后的MainActivity代码:

package com.example.task2

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupWithNavController
import com.example.task2.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState) // 优先完成Activity初始化
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.bottomNavMain.menu.findItem(R.id.fragmentHome).isChecked = true

        val navHost = supportFragmentManager.findFragmentById(R.id.main_nav_host) as NavHostFragment
        val navController = navHost.navController
        binding.bottomNavMain.setupWithNavController(navController)
    }
}

2. 验证核心配置一致性

  • 确认bottom_nav.xml中的菜单项ID与main_nav.xml导航图中的Fragment ID完全匹配(当前代码中fragmentHome、fragmentRegister、fragmentProfile已匹配)
  • 检查所有Fragment类是否正确继承自androidx.fragment.app.Fragment,例如:
class FragmentHome : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.home_fragment, container, false)
    }
}

原因说明

在原代码中,先初始化View Binding再调用super.onCreate,此时Activity的FragmentManager尚未完成初始化,FragmentContainerView无法获取有效的FragmentHostCallback上下文,进而触发空指针异常。调整初始化顺序后,Activity完成核心初始化流程,FragmentManager可正常为NavHostFragment提供上下文支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:10:55