Créer un contrôleur de navigation

Le contrôleur de navigation est l'un des concepts clés de la navigation. Il contient le graphique de navigation et présente les méthodes qui permettent à votre appli de se déplacer entre les destinations du graphique.

Lorsque vous utilisez le composant de Navigation, vous créez un contrôleur de navigation à l'aide de la classe NavController. NavController est l'API de navigation centrale. Elle identifie les destinations que l'utilisateur a consultées et lui permet de passer d'une destination à une autre. Ce guide explique comment créer un NavController dans votre appli.

Pour savoir comment ajouter un graphique de navigation à votre NavController, consultez la section Concevoir votre graphique de navigation. NavController propose plusieurs façons d'accéder aux destinations de son graphique. Pour en savoir plus, consultez la section Accéder à une destination.

Compose

Pour créer un NavController lors de l'utilisation de Jetpack Compose, appelez rememberNavController() :

val navController = rememberNavController()

Vous devez créer et placer le NavController en haut de votre hiérarchie de composables. Il doit être placé suffisamment haut afin que tous les composables ayant besoin d'y faire référence soient en mesure de le faire.

Cela vous permet d'utiliser NavController comme source unique d'informations afin de mettre à jour des composables en dehors de vos écrans. Cela respecte les principes du hissage d'état (hoisting).

Vues

Si vous utilisez le framework de l'interface utilisateur Vues, vous pouvez récupérer votre navController à l'aide de l'une des méthodes suivantes, en fonction du contexte.

Kotlin :

Java :

En règle générale, vous obtenez d'abord un NavHostFragment, puis vous récupérez le NavController à partir du fragment. L'extrait de code suivant le démontre :

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();

Complément d'informations