使用单个 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)
我有一个包含多个功能模块的应用程序,我想在主模块中使用单个 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)