导航控制器是导航中的关键概念之一。它保存导航图并公开方法,允许您的应用在图中的目标之间移动。
使用导航组件时,您可以使用NavController
类创建导航控制器。NavController
是中央导航API。它跟踪用户访问过的目标,并允许用户在目标之间移动。本指南演示如何在您的应用中创建NavController
。
有关如何将导航图添加到NavController
的信息,请参阅设计导航图。NavController
提供了几种不同的方法来导航到其图中的目标。有关更多信息,请参阅导航到目标。
Compose
当使用Jetpack Compose创建NavController
时,请调用rememberNavController()
val navController = rememberNavController()
您应该在可组合层次结构的高处创建NavController
。它需要足够高,以便所有需要引用它的可组合都可以这样做。
这样做可以让您使用NavController
作为更新屏幕外部的可组合项的唯一事实来源。这遵循了状态提升的原则。
视图
如果您正在使用 Views UI 框架,您可以根据上下文使用以下方法之一检索您的 NavController
Kotlin
Java
NavHostFragment.findNavController(Fragment)
Navigation.findNavController(Activity, @IdRes int viewId)
Navigation.findNavController(View)
通常,您首先获取一个NavHostFragment
,然后从片段中检索NavController
。以下代码段演示了这一点
Kotlin
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
Java
NavHostFragment navHostFragment =
(NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();