无法找到NavController设置:Fragment间导航报错求助
问题核心
在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
相关产品推荐
相关产品推荐

