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

无法找到NavController设置:Fragment间导航报错求助

解决Fragment中调用findNavController()出现的IllegalStateException问题

问题核心

在LoginFragment的onViewCreated中调用view.findNavController()时,报错提示当前ScrollView没有设置NavController,原因是你错误地从Fragment自身布局的容器(ScrollView)中查找NavController,而NavController实际绑定在Activity的FragmentContainerView上。

解决方案

方案1:直接调用Fragment的扩展方法findNavController()

这是最简洁的方式,Fragment自身的扩展方法会自动找到对应的NavHost的NavController:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    navController = findNavController()
    // 后续导航逻辑
}

方案2:通过Activity中的NavHost容器获取

如果你需要明确指定NavHost,可以通过Activity找到对应的FragmentContainerView再获取NavController:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val navHost = requireActivity().findViewById<FragmentContainerView>(R.id.container)
    navController = navHost.findNavController()
    // 后续导航逻辑
}

原因说明

你的Activity布局中,androidx.fragment.app.FragmentContainerView(id为container)是NavHost容器,通过app:navGraph和app:defaultNavHost="true"绑定了导航控制器。而LoginFragment布局中的ScrollView只是自身的布局容器,并非NavHost,所以调用view.findNavController()会找不到对应的控制器。

即使你把ScrollView改成LinearLayout,本质还是Fragment内部的布局容器,依然不是NavHost,所以问题不会解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:22:40