使用单个 NavHostFragment 导航具有多个模块的应用程序

Navigation for app with multiple modules using single NavHostFragment

我有一个包含多个功能模块的应用程序,我想在主模块中使用单个 NavHostFragment 进行导航。

         app
       |  |  |
feature1  |  feature2
       |  |  |
       common

导航图似乎工作正常(我可以添加功能模块中的所有片段,启动应用程序时会显示 startFragment)但有时我必须从功能模块内部开始导航,但我没有可以在那里访问 NavHostFragment。

例如:

findNavController(navHostFragment).navigate(R.id.loginFragment)

根据 findNavController() documentation:

This method will locate the NavController associated with this Fragment, looking first for a NavHostFragment along the given Fragment's parent chain.

这意味着您不需要传入 NavHostFragment 本身,但可以传入您 NavHostFragment 创建的任何片段,它会正确找到 NavController .

因此在几乎所有情况下,您应该将 this 传递给 findNavController():

// From anywhere in one of the Fragments in your navigation graph
findNavController(this).navigate(R.id.loginFragment)