Componente de Navegación para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es el Componente de Navegación y para qué sirve?

\n\n

El Componente de Navegación es una biblioteca de Google para Android, diseñada para simplificar la navegación entre pantallas (fragmentos, Activities, diálogos) en aplicaciones en Kotlin y Java. Forma parte de Android Jetpack y proporciona una forma única y predecible de gestionar transiciones, manejar argumentos y trabajar con el botón "Atrás".

\n\n

¿Para qué sirve? Sin el Componente de Navegación, los desarrolladores solían escribir mucho código repetitivo: crear FragmentManager, manejar BackStack, pasar datos a través de Bundle y rastrear el estado de las transiciones. La biblioteca resuelve estos problemas ofreciendo:

\n
    \n
  • Editor visual de navegación — grafo de transiciones en XML.
  • \n
  • Paso seguro de argumentos mediante Safe Args (plugin de Gradle).
  • \n
  • Gestión automática de BackStack — el botón "Atrás" funciona correctamente.
  • \n
  • Enlaces profundos (Deep Links) — transiciones desde notificaciones o enlaces externos.
  • \n
  • Animaciones de transición — configuraciones simples en XML.
  • \n
\n\n

Instalación del Componente de Navegación

\n\n

Dado que el Componente de Navegación es una biblioteca para Android, la instalación se realiza a través del sistema de compilación Gradle, no mediante pip o npm. Agregue las dependencias en el archivo build.gradle (nivel de módulo, normalmente app/build.gradle):

\n\n
// build.gradle (Module: app)\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'androidx.navigation.safeargs.kotlin' // para Safe Args\n}\n\nandroid {\n    // ... configuraciones estándar\n}\n\ndependencies {\n    implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'\n    implementation 'androidx.navigation:navigation-ui-ktx:2.7.7'\n    // Para trabajar con módulos de funciones dinámicas (Feature Modules)\n    implementation 'androidx.navigation:navigation-dynamic-features-fragment:2.7.7'\n}\n
\n\n

Asegúrese también de que en el build.gradle raíz se haya agregado el plugin Safe Args:

\n\n
// build.gradle (Project level)\nplugins {\n    id 'androidx.navigation.safeargs.kotlin' version '2.7.7' apply false\n}\n
\n\n

Después de sincronizar Gradle, la biblioteca está lista para usar.

\n\n

Inicio rápido con ejemplo de código

\n\n

Crearemos una aplicación simple con dos pantallas: HomeFragment y DetailFragment. El usuario presiona un botón en la primera pantalla y navega a la segunda, pasando una cadena de texto.

\n\n

Paso 1: Cree el archivo de navegación

\n

En la carpeta res/navigation, cree el archivo nav_graph.xml:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<navigation xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:id="@+id/nav_graph"\n    app:startDestination="@id/homeFragment">\n\n    <fragment\n        android:id="@+id/homeFragment"\n        android:name="com.example.app.HomeFragment"\n        android:label="Home"\n        tools:layout="@layout/fragment_home">\n        <action\n            android:id="@+id/action_homeFragment_to_detailFragment"\n            app:destination="@id/detailFragment" />\n    </fragment>\n\n    <fragment\n        android:id="@+id/detailFragment"\n        android:name="com.example.app.DetailFragment"\n        android:label="Detail"\n        tools:layout="@layout/fragment_detail">\n        <argument\n            android:name="message"\n            app:argType="string" />\n    </fragment>\n</navigation>\n
\n\n

Paso 2: Configure la Activity

\n

En activity_main.xml, agregue el NavHostFragment:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xm                    

Recommendations