Cómo crear un controlador de navegación

El controlador de navegación es uno de los conceptos clave de la navegación. Contiene el gráfico de navegación y expone los métodos que permiten que tu app se mueva entre los destinos del gráfico.

Cuando utilizas el componente Navigation, creas un controlador de navegación con la clase NavController. NavController es la API de navegación central. Hace un seguimiento de los destinos que visitó el usuario y le permite moverse entre los destinos. En esta guía, se muestra cómo crear un objeto NavController en tu app.

Si deseas obtener información para agregar un gráfico de navegación a tu NavController, consulta Cómo diseñar tu gráfico de navegación. NavController ofrece algunas maneras diferentes de navegar a los destinos en su gráfico. Para obtener más información, consulta Cómo navegar a un destino.

Compose

Para crear un NavController cuando usas Jetpack Compose, llama a rememberNavController():

val navController = rememberNavController()

Debes crear el objeto NavController con una jerarquía componible alta. Debe ser lo suficientemente alta como para que todos los componibles que necesiten hacer referencia a este puedan hacerlo.

Si lo haces, podrás usar NavController como la única fuente de confianza para actualizar componibles fuera de las pantallas. Esto sigue los principios de la elevación de estado.

Views

Si usas el framework de IU de Views, puedes recuperar el NavController con uno de los siguientes métodos, según el contexto:

Kotlin:

Java:

Por lo general, primero obtienes un objeto NavHostFragment y, luego, recuperas el elemento NavController del fragmento. Esto se demuestra en el siguiente fragmento:

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

Lecturas adicionales