Navigation

Navigation es un marco para navegar entre "destinos" dentro de una aplicación de Android que proporciona una API coherente si los destinos se implementan como elementos Fragment, Activity o algún otro tipo de componente. Consulta los documentos de referencia para obtener más información.

Cómo declarar dependencias

Para agregar una dependencia en Navigation, debes agregar el repositorio de Maven de Google a tu proyecto. Lee el repositorio Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesitas en el archivo build.gradle para tu app o módulo.

    dependencies {
      def nav_version = "2.1.0-rc01"

      // Java
      implementation "androidx.navigation:navigation-fragment:$nav_version"
      implementation "androidx.navigation:navigation-ui:$nav_version"

      // Kotlin
      implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
      implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    }
    

Safe Args

Para agregar Safe Args a tu proyecto, incluye la siguiente classpath en tu archivo build.gradle de nivel superior:

    buildscript {
        repositories {
            google()
        }
        dependencies {
            def nav_version = "2.1.0-rc01"
            classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        }
    }
    

También debes aplicar uno de los dos complementos disponibles.

Para generar código Java adecuado para Java o módulos Java y Kotlin mixtos, agrega esta línea en el archivo build.gradle de tu app o módulo:

apply plugin: "androidx.navigation.safeargs"

Como alternativa, para generar el código de Kotlin adecuado para módulos solo de Kotlin, agrega lo siguiente:

apply plugin: "androidx.navigation.safeargs.kotlin"

Debes tener android.useAndroidX=true en tu archivogradle.properties , según lo especificado en Cómo migrar a AndroidX.

Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.

Para obtener más información acerca de las dependencias, consulta Cómo agregar dependencias de compilación.

Versión 2.2.0-alpha01

7 de agosto de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-alpha01. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Ahora, SavedStateViewModelFactory es el componente predeterminado cuando se usa by navGraphViewModels() o el constructor ViewModelProvider con un elemento ViewModelStoreOwner que muestra NavController.getViewModelStoreOwner(). (b/135716331)

Cambios en la API

Correcciones de errores

  • Ahora, NavHostFragment usa FragmentContainerView, lo que corrige problemas de orden z de animación y despacho de inserciones de ventana a elementos Fragment. (b/137310379)

Versión 2.1.0-rc01

7 de agosto de 2019

Lanzamiento de androidx.navigation:navigation-*:2.1.0-rc01. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Cambios en la API

  • Se quitó la API getViewModelStore() obsoleta de NavController que se había incorporado en la versión 2.1.0-alpha02. (aosp/1091021)

Versión 2.1.0-beta02

19 de julio de 2019

Lanzamiento de androidx.navigation:*:2.1.0-beta02. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Correcciones de errores

  • Se quitó la dependencia no intencional de jacoco que se introdujo en 2.1.0-beta01. (b/137782950)

Versión 2.1.0-beta01

17 de julio de 2019

Lanzamiento de androidx.navigation:*:2.1.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Ahora, NavigationUI anima la eliminación del botón Arriba cuando se usa setupWithNavController() con Toolbar o CollapsingToolbarLayout. (b/131403621)

Correcciones de errores

  • Se corrigió un problema de sincronización cuando se usan múltiples elementos NavHostFragment con el mismo contenedor con findNavController(). (b/136021571)

Versión 2.1.0-alpha06

2 de julio de 2019

Lanzamiento de androidx.navigation:*:2.1.0-alpha06. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • El atributo app:navGraph utilizado por NavHostFragment se movió al artefacto navigation-runtime. Los navegadores personalizados que se pueden agregar mediante XML deben usar este atributo para lograr la integración con el panel Host del editor de Navigation. (b/133880955)

Cambios en la API

  • La API getViewModelStore() en NavController dejó de estar disponible a favor del nuevo método getViewModelStoreOwner() que muestra un elemento ViewModelStoreOwner. (aosp/987010)
  • La implementación de destinos de ventana flotante, como los destinos <dialog>, se generalizó en una interfaz de marcador, FloatingWindow, que ahora implementan todos los destinos <dialog>. Los métodos NavigationUI para interactuar con la barra superior de apps ahora ignoran los destinos FloatingWindow. (b/133600763)

Cambios en los comportamientos

  • La navegación ahora mantiene correctamente su estado sincronizado con lo que se ve en la pantalla cuando se utiliza un destino <dialog>. Como consecuencia, Navigation ahora muestra automáticamente los destinos <dialog> cuando navegas a un destino sin diálogo y sin actividad, como un destino <fragment>. (b/134089818)

Correcciones de errores

  • Navigation ahora suprime la animación que se produce cuando se recrea la actividad al administrar un vínculo profundo, lo que corrige un destello visual. (b/130362979)
  • Se corrigió un error por el cual la pila de actividades de Navigation no estaba sincronizada cuando se mostraba un elemento Fragment a medida que se agregaba el fragmento inicial. (b/133832218)

Versión 2.1.0-alpha05

5 de junio de 2019

Lanzamiento de androidx.navigation:*:2.1.0-alpha05. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Cambios en la API

  • Se cambió el nombre de las API relacionadas con el host en NavController y se las trasladó a una nueva subclase de NavController, NavHostController. (aosp/966091)
  • Se reemplazó el método NavController setHostOnBackPressedDispatcherOwner() con setOnBackPressedDispatcher() del método NavHostController y ahora requiere que llames a setLifecycleOwner() antes de llamar al método. (aosp/965409)
  • Ahora, NavHostController contiene un método enableOnBackPressed(boolean) que reemplaza a la clase NavHostOnBackPressedManager que anteriormente mostraba setHostOnBackPressedDispatcherOwner(). (aosp/966091)

Correcciones de errores

  • Se corrigió un problema en el que la pila de actividades no era correcta después de la navegación mediante URI. (b/132509387)
  • Los vínculos directos administrados automáticamente por NavController ahora solo se activan una vez. (b/132754763)

Versión 2.1.0-alpha04

16 de mayo de 2019

Lanzamiento de androidx.navigation:*:2.1.0-alpha04. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Correcciones de errores

  • NavHostFragment respeta correctamente el elemento app:defaultNavHost cuando se interceptan los eventos del botón Atrás del sistema, lo que corrige una regresión en Navitation 2.1.0-alpha03. b/132077777
  • Ahora, DialogFragmentNavigator administra correctamente las operaciones popBackStack() y navigateUp(). b/132576764
  • Se corrigió un problema de IllegalStateException: unknown destination during restore cuando se navegaba repetidamente entre gráficos anidados. b/131733658

Versión 2.1.0-alpha03

7 de mayo de 2019

Lanzamiento de androidx.navigation:*:2.1.0-alpha03. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Problemas conocidos

  • NavHostFragment continúa interceptando el botón Atrás del sistema a pesar de usar app:defaultNavHost="false" b/132077777

Nuevas funciones

  • Ahora puedes crear destinos <dialog> que mostrarán un DialogFragment cuando usas un elemento navigate hacia ellos. NavHostFragment admite los destinos de diálogo de forma predeterminada. b/80267254
  • Además de llamar a navigate con un ID de recurso o una instancia de NavDirections, ahora puedes navegar mediante un elemento Uri, que utiliza el <deepLink> que agregaste a un destino para navegar al destino correcto. b/110412864

Cambios en los comportamientos

  • Las animaciones predeterminadas proporcionadas por NavigationUI se aceleraron de 400 ms a 220 ms para que coincidan con la velocidad de animación predeterminada de actividades y fragmentos. b/130055522

Cambios en la API

  • El método createFragmentNavigator() de NavHostFragment dejó de estar disponible y su funcionalidad se movió al nuevo método onCreateNavController() a fin de dejar más claro que este es el punto de entrada correcto para agregar navegadores personalizados al subclasificar NavHostFragment. b/122802849
  • Se agregó un método hasDeepLink() a NavDestination para permitirte verificar si un elemento Uri determinado puede ser administrado por ese destino o, en el caso de un NavGraph, por cualquier destino del gráfico de navegación. b/117437718

Correcciones de errores

  • Los argumentos predeterminados ahora se pasan correctamente a instancias de OnDestinationChangedListener. b/130630686
  • Ahora, NavHostFragment intercepta los eventos Atrás del sistema con OnBackPressedDispatcher y soluciona un problema que se producía cuando se realizaba la navegación condicional en los métodos del ciclo de vida de Fragment al volver a un Fragment. b/111598096
  • Para Safe Args, un elemento android:defaultValue=”@null” con un elemento app:argType sin especificar, ahora se infiere correctamente como un argumento de string. b/129629192

Versión 2.1.0-alpha02

3 de abril de 2019

Lanzamiento de androidx.navigation:*:2.1.0-alpha02. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Ahora puedes crear ViewModels con un ámbito de gráfico de navegación mediante el delegado de propiedad by navGraphViewModels() para usuarios de Kotlin o mediante la API getViewModelStore() agregada a NavController. b/111614463

Cambios en la API

  • Ahora puedes agregar un elemento app:targetPackage a un destino <activity> para limitar el nombre del paquete coincidente. Admite app:targetPackage="${applicationId}" para restringir el paquete a tu propio ID de aplicación. b/110975456

Correcciones de errores

  • Ya no se analiza el elemento android:name para destinos <activity> en un tiempo de inflación de clase, lo que evita que se produzcan ClassNotFoundExceptions cuando se usa funciones dinámicas. b/124538597

Versión 2.1.0-alpha01

19 de marzo de 2019

Esta es la primera versión Alfa de Navigation 2.1.0.

Cambios de dependencia

  • Ahora, Navigation depende de androidx.core:core:1.0.1 y androidx.fragment:fragment:1.1.0-alpha05. Esta versión también elimina la dependencia de androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Cambios en la API

  • Se agregó un nuevo método Navigation.createNavigateOnClickListener(NavDirections) como alternativa a la creación de un detector de clics con un ID de recurso y un conjunto. b/127631752
  • FragmentNavigator.instantiateFragment dejó de estar disponible. La implementación predeterminada ahora usa FragmentFactory para instanciar elementos Fragment. b/119054429

Correcciones de errores

  • La navegación ya no envía un elemento Bundle nulo cuando hay argumentos adjuntos a un destino, lo que corrige un problema cuando se usa android:defaultValue="@null". b/128531879
  • Safe Args ahora depende de KotlinPoet 1.1.0, lo que corrige un problema con nombres de paquetes extremadamente largos. b/123654948

Versión 2.0.0

14 de marzo de 2019

Lanzamiento de Navigation 2.0.0 sin cambios desde 2.0.0-rc02.

Versión 2.0.0-rc02

6 de marzo de 2019

Navigation 2.0.0-rc02 proporciona nuevos artefactos con el ID de grupo androidx.navigation y cambia sus dependencias a los equivalentes de AndroidX.

El comportamiento de 2.0.0-rc02 es idéntico al comportamiento de Navigation 1.0.0-rc02 y no se deberían necesitar cambios en tu código para actualizar desde 1.0.0-rc02 además de actualizar tus dependencias para que coincidan con las nuevas dependencias.

Tu proyecto debe migrar a AndroidX para usar versiones2.X de Navigation. Navigation 1.0 estable será la última versión que use las dependencias de la biblioteca de compatibilidad; los desarrollos futuros a partir de 1.0 se basarán en AndroidX y se compilarán sobre la versión estable 2.0.

Dependencias anteriores a AndroidX

Para las versiones de navegación anteriores a AndroidX, incluye las siguientes dependencias:

dependencies {
        def nav_version = "1.0.0"

        implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
        implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
    }
    

Para Safe Args, agrega el siguiente classpath a tu archivo de nivel superior build.gradle:

buildscript {
        repositories {
            google()
        }
        dependencies {
            classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
        }
    }
    

Versión 1.0.0

14 de marzo de 2019

Lanzamiento de Navigation 1.0.0 sin cambios desde 1.0.0-rc02.

Versión 1.0.0-rc02

26 de febrero de 2019

Esta es la segunda versión potencial para la versión estable de Navigation 1.0.0. Esta versión contiene una serie de correcciones de errores.

Correcciones de errores

  • Se solucionó un problema por el cual se ignoraba popBackStack() si el gráfico raíz no tenía un ID. b/126251695
  • Ahora, navigateUp() ahora maneja correctamente la navegación a las tareas de tu app cuando se lo llama después de administrar un vínculo directo sin FLAG_ACTIVITY_NEW_TASK. b/126082008
  • Se solucionó un problema en el que ActivityNavigator.applyPopAnimationsToPendingTransition no aplicaba la animación de salida emergente correcta. b/126237567
  • El código de Kotlin generado por Safe Args ahora escapa correctamente a las palabras clave de Kotlin, como in y fun en el nombre del paquete asociado con la clase R. b/126020455

Versión 1.0.0-rc01

21 de febrero de 2019

Esta es una versión potencial para la versión estable de Navigation 1.0.0. Esta versión contiene una corrección de errores.

Correcciones de errores

  • Se solucionó un problema que se producía cuando se usaban elementos Fragment y operaciones de navegación singleTop. b/124294805

Versión 1.0.0-beta02

12 de febrero de 2019

Esta versión incluye una serie de mejoras pequeñas y correcciones de errores importantes.

Nuevas funciones

  • Ahora puedes usar 0 como android:defaultValue para argumentos reference. b/124248602

Cambios en los comportamientos

  • Ahora se priorizan las coincidencias exactas de vínculos directos sobre los vínculos directos con .* o coincidencias de argumentos. b/123969518

Correcciones de errores

  • popBackStack() y navigateUp ahora muestran correctamente false cuando hacen emerger el último destino en la pila de actividades, la fijación de una regresión que se introdujo en 1.0.0-beta01. b/123933201
  • Navigation ahora configura de manera correcta el elemento ClassLoader durante la restauración del estado de la instancia guardada, lo que evita problemas cuando se usan clases personalizadas en el estado guardado de Navigator o en argumentos enviados a un NavDestination. b/123893858
  • Las clases NavArgs generadas por Safe Args ya no fallan cuando se restaura un argumento Parcelable[] desde el estado de instancia guardado. b/123963545
  • Safe Args ahora limpia correctamente las clases de Kotlin generadas de forma necesaria. b/124120883

Versión 1.0.0-beta01

4 de febrero de 2019

Esta es la primera versión Beta de Navigation. En el futuro, se espera que la API de Navigation se mantenga estable hasta la próxima versión, a menos que haya un problema grave. Esta versión contiene algunas correcciones de errores y cambios en los comportamientos.

Cambios en los comportamientos

  • Navigation ahora garantiza que los valores predeterminados de los argumentos se traten de forma idéntica en tiempo de ejecución y mediante Safe Args. Como consecuencia, solo los argumentos con app:argType="reference" pueden tener un punto de valor predeterminado a otro recurso (por ejemplo, @color/colorPrimary). Intentar usar un valor predeterminado de referencia con un elemento app:argType diferente dará como resultado una excepción al analizar el XML de navegación. b/123551990
  • Safe Args ahora depende del complemento de Android para Gradle 3.3.0. aosp/888413
  • Safe Args ahora depende de Kotlin 1.3.20. aosp/888414

Correcciones de errores

  • Ahora es posible usar Safe Args en módulos de biblioteca y funciones en todas las versiones del complemento Gradle para Android. b/121304903
  • Se corrigió una regresión que hacía que una sola operación popBackStack() mostrara todas las copias de un destino desde la parte superior de la pila de actividades, en lugar de hacerlo en un solo destino a la vez. b/123552990
  • Se solucionó un problema en el que el estado FragmentNavigator se desincronizaba con el estado NavController, lo que provocaba una excepción IllegalStateException cuando se intentaba restaurar la pila de actividades. b/123803044
  • Se solucionó un problema en el que la flecha hacia atrás que administra NavigationUI no aparecía cuando se usaba ProGuard con ofuscación. b/123449431
  • El código generado por Safe Args ahora se administra correctamente con un elemento app:argType que apunte hacia a una clase interna estática en el formato .OuterClass$InnerClass. b/123736741
  • El código de Java generado por Safe Args ahora administra de manera correcta las acciones globales y los destinos profundamente anidados. b/123347762

Versión 1.0.0-alpha11

23 de enero de 2019

Esta es una versión de revisión de 1.0.0-alpha10 que soluciona un problema con Safe Args.

Correcciones de errores

  • Soluciona un problema por el cual Safe Args no podía importar la clase Directions asociada con acciones globales. b/123307342

Versión 1.0.0-alpha10

23 de enero de 2019

Problemas conocidos

  • Safe Args no puede importar la clase Versión asociada con acciones globales. b/123307342

Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.

Nuevas funciones

  • Ahora, los usuarios de Kotlin pueden usar el delegado de la propiedad by navArgs() para obtener perezosamente una referencia a una clase NavArgs generada por Safe Args en un elemento Activity o Fragment. b/122603367
  • Safe Args ahora te permite generar código Kotlin mediante la aplicación del complemento androidx.navigation.safeargs.kotlin. El código de Kotlin está diseñado específicamente para módulos exclusivos de Kotlin, con argumentos predeterminados y clases inmutables en el patrón del compilador que todavía está disponible mediante el complemento androidx.navigation.safeargs anterior. b/110263087

Cambios en los comportamientos

  • Los vínculos directos coincidentes ahora se inclinan hacia el vínculo directo que tiene la mayor cantidad de argumentos que coinciden. b/118393029
  • Llamar a setGraph() en NavController ahora restablecerá la pila de actividades. b/111450672
  • Los vínculos directos desconocidos ya no arrojan una IllegalStateException, pero se ignoran, lo que soluciona problemas con NavHostFragment anidados o múltiples. b/121340440

Cambios rotundos

  • El método NavOptions.applyPopAnimationsToPendingTransition() para aplicar animaciones emergentes para un elemento Activity se movió a ActivityNavigator. b/122413117
  • Safe Args ahora evita duplicar clases idénticas para acciones sin argumentos. El tipo que se muestra para los métodos sin argumentos en las clases NavDirections generadas ahora es NavDirections. b/123233147
  • Las clases Directions generadas por Safe Args ya no tienen un constructor público: solo debe interactuar con los métodos estáticos generados. b/123031660
  • Las clases NavDirections generadas por Safe Args ya no tienen un constructor público: solo deben ser generadas mediante los métodos estáticos en las clases Directions generadas. b/122963206
  • El elemento mostrado Bundle de getArguments() de NavDirections ahora se marca como @NonNull en lugar de @Nullable. b/123243957

Correcciones de errores

  • Ahora, NavDeepLinkBuilder administra correctamente múltiples PendingIntent simultáneos al mismo destino mediante los argumentos que pasas para determinar la unicidad. b/120042732
  • Ahora, NavController administra correctamente las operaciones popBackStack() cuando se usa un elemento NavHostFragment anidado o algún otro elemento Fragment secundario con una pila de actividades. b/122770335
  • Ahora, NavigationUI establece correctamente la descripción del contenido del botón Arriba. b/120395362
  • Las clases Directions generadas por Safe Args ahora administran correctamente acciones globales que tienen el mismo ID que una acción en un destino. b/122962504
  • Ahora, las clases NavDirections generadas por Safe Args tienen valores hashCode() iguales cuando equals() se muestra como verdadero. b/123043662
  • Ahora, FragmentNavigator envía un mensaje de error más claro si se intenta crear elementos FragmentTransactions personalizados en FragmentManager de NavHostFragment. Siempre debes usar getChildFragmentManager(). b/112927148

Versión 1.0.0-alpha09

18 de diciembre de 2018

Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.

Optamos por no continuar desarrollando el artefacto android.arch.navigation:navigation-testing. Si bien resultó ser útil para las pruebas internas de NavController, recomendamos utilizar estrategias de prueba alternativas, como simular la instancia de NavController para verificar que se estén realizando las llamadas de navigate() correctas. Este enfoque se desarrolla en detalle en la charla de Actividad única de Android Dev Summit 2018 y seguiremos trabajando en la documentación adicional específica acerca de las pruebas con Navigation.

Nuevas funciones

  • Los elementos MenuItem con menuCategory="secondary" ya no mostrarán la pila de actividades cuando se utilicen con los métodos NavigationUI. b/120104424
  • AppBarConfiguration ahora te permite establecer una instancia de OnNavigateUpListener de resguardo a la que se puede llamar cuando navController.navigateUp() muestra false. b/79993862 b/120690961

Cambios rotundos

  • Cuando se utiliza un <argument> con una argType="reference", Navigation ya no analiza la referencia, sino que proporciona el ID del recurso sin procesar. b/111736515
  • onNavDestinationSelected() ahora se muestra para el destino de inicio de tu gráfico de navegación de manera predeterminada, lo que hace que sea coherente con los métodos setup. Agrega menuCategory="secondary" a tu MenuItem a fin de evitar que se muestre la pila de actividades. aosp/852869
  • Los métodos fromBundle() de las clases Args generadas ahora toman un valor de Bundle no nulo en lugar de un valor que puede ser nulo de Bundle. aosp/845616

Correcciones de errores

  • Los argumentos ahora se analizan correctamente desde los vínculos directos, como el tipo de argType correcto en lugar de hacerlo siempre como strings. b/110273284
  • La navegación ahora exporta correctamente sus recursos públicos. b/121059552
  • Safe Args ahora es compatible con el complemento Gradle para Android 3.4 Canary 4 y versiones posteriores. b/119662045

Versión 1.0.0-alpha08

6 de diciembre de 2018

Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.

Nuevas funciones

  • A partir de ahora, las etiquetas Destination que se usen con métodos NavigationUI, reemplazarán automáticamente las instancias de {argName} en tu android:label con el argumento correcto. b/80267266
  • Ahora Navigation depende de la Biblioteca de compatibilidad 28.0.0. b/120293333

Cambios rotundos

  • El nombre de OnNavigatedListener cambió por OnDestinationChangedListener. b/118670572
  • Ahora OnDestinationChangedListener también transfiere el Bundle de los argumentos. aosp/837142
  • Se quitaron los atributos app:clearTask y app:launchDocument y sus métodos asociados. Usa app:popUpTo con la raíz de tu gráfico para quitar todos los destinos de tu pila de actividades. b/119628354
  • Ahora ActivityNavigator.Extras usa un patrón Builder y agrega la posibilidad de configurar cualquier marca de Intent.FLAG_ACTIVITY_. aosp/828140
  • El nombre de NavController.onHandleDeepLink cambió por handleDeepLink. aosp/836063
  • Muchas clases y métodos, no destinados para subclases, como NavOptions, NavInflater, NavDeepLinkBuilder y AppBarConfiguration quedaron como final. aosp/835681
  • Se quitó el método obsoleto NavHostFragment.setGraph(). aosp/835684
  • Se quitó el método obsoleto NavigationUI.navigateUp(DrawerLayout, NavController). aosp/835684
  • La creación de fragmentos se trasladó a FragmentNavigator, y ahora es más fácil delegar la creación de fragmentos a FragmentFactory. b/119054429
  • El constructor de NavGraphNavigator ya no usa un Context. aosp/835340
  • Ahora NavigatorProvider es una clase en lugar de una interfaz. No cambió la funcionalidad del NavigatorProvider que muestra getNavigatorProvider(). aosp/830660
  • Se quitó NavDestination.navigate(). Se llamará navigate() en el Navigator en su lugar. aosp/830663
  • Reestructuración importante de Navigator, se quitó la necesidad de contar con OnNavigatorNavigatedListener y, en su lugar, navigate muestra el NavDestination al que se navegó.
  • Las instancias de Navigator ya no pueden enviar eventos emergentes al NavController. Considera usar una OnBackPressedCallback para interceptar las instancias en las que se presione el botón atrás y llamar a navController.popBackStack(). aosp/833716

Correcciones de errores

  • Ahora popUpTo funciona con regularidad cuando el destino es un elemento <navigation>. b/116831650
  • Se corrigieron errores que daban como resultado una IllegalArgumentException cuando se usaban gráficos anidados. b/118713731 b/113611083 b/113346925 b/113305559
  • Ahora el atributo dataPattern de los destinos <activity> completará los argumentos de argumentos que no son de cadena mediante una llamada a toString(). b/120161365

Safe Args

  • Safe Args admite los objetos que se pueden serializar, incluidos los valores de enumeración. Los tipos de enumeración pueden establecer un valor predeterminado mediante el literal de enumeración sin el nombre de clase (p. ej., app:defaultValue="READ"). b/111316353
  • Safe Args admite matrices de todos los tipos compatibles. b/111487504
  • Ahora Safe Args ignora las subcarpetas de los directorios de recursos. b/117893516
  • Safe Args agrega anotaciones @Override cuando corresponda. b/117145301

Versión 1.0.0-alpha07

29 de octubre de 2018

Nuevas funciones

Cambios rotundos

  • El módulo navigation-testing-ktx se integró al navigation-testing artifact y ya no se lo publicará.
  • Ahora el artefacto navigation-testing tiene una dependencia en la biblioteca estándar de Kotlin. Se modificó la API para que sea más coherente con las convenciones de Kotlin, aunque puedes seguir usándola para pruebas escritas en Java.
  • Los gráficos de navegación registrados en manifiestos de metadatos ya no son compatibles. b/118355937
  • Las acciones ya no pueden adjuntarse a los destinos <activity>. aosp/785539

Correcciones de errores

  • Ahora los vínculos directos analizan correctamente los parámetros de consultas. b/110057514
  • Ahora los destinos de actividades aplican correctamente todas las animaciones de entrada y salida. b/117145284
  • Se corrigieron los errores que ocurren después de los cambios de configuración cuando se usan Navigator personalizados. b/110763345

Safe Args

  • Ahora Safe args tienen una dependencia fija en Android Gradle Plugin 3.2.1. b/113167627
  • Ahora se pueden generar Directions para las clases internas. b/117407555
  • Se corrigió un problema con la generación de Directions en un gráfico <include>. b/116542123

Versión 1.0.0-alpha06

20 de septiembre de 2018

Nuevas funciones

Cambios en la API

  • Cambio rotundo: Ahora el método navigate() de Navigator toma un parámetro Navigator.Extras.
  • Ahora el método getGraph() de NavController es NonNull. b/112243286

Correcciones de errores

  • NavigationUI.setupWithNavController() ya no filtra reproducciones si se usa con vistas de destinos individuales b/111961977
  • Ahora solo se llama una vez a onSaveState() de Navigator. b/112627079

Safe Args

  • Ahora las clases Directions de destino de Navigation extienden su clase de Directions del nivel superior, si es que existe b/79871405
  • Ahora las clases Directions y Args tienen una implementación toString() útil. b/111843389

Versión 1.0.0-alpha05

10 de agosto de 2018

Correcciones de errores

  • Se corrigió un error que ocasionaba un comportamiento incorrecto de la pila de actividades. b/111907708
  • Se corrigió un error de clases Generated Args en equals(). b/111450897
  • Se corrigió un error de compilación en Safe Args. b/109409713
  • Se corrigió una conversión de identificadores de recursos a nombres de Java. b/111602491
  • Se corrigieron mensajes de error sobre la nulidad en el complemento de Safe Args.
  • Se agregaron anotaciones de nulidad que faltaban.

Versión 1.0.0-alpha04

19 de julio de 2018

Navigation 1.0.0-alpha04 y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios en los comportamientos y correcciones de errores.

Cambios de comportamiento/API

  • NavHostFragment siempre establecerá el fragmento actual como el fragmento de navegación principal a fin de garantizar que los administradores de fragmentos secundarios aparezcan antes que el NavController externo b/111345778

Safe Args

  • Cambio rotundo: app:type se reemplazó por app:argType para evitar conflictos con otras bibliotecas, como ConstraintLayout 2.0.0-alpha1 b/111110548
  • Ahora es posible hacer clic en los mensajes de error de Safe Args b/111534438
  • Ahora las clases Args confirman que los atributos NonNull en realidad no son nulos. b/111451769
  • Se agregaron anotaciones NonNull adicionales a clases generadas por NavDirections y Args. b/111455455 b/111455456

Correcciones de errores

  • Se corrigió un problema con el botón Back del sistema después de establecer un vínculo directo con un destino de fragmento. b/111515685

Versión 1.0.0-alpha03

12 de julio de 2018

Navigation 1.0.0-alpha03 y los complementos Safe Args Gradle asociados incluyen varios cambios de API, cambios en los comportamientos y correcciones de errores.

Cambios de comportamiento/API

  • Se agregó un método NavigationUI.setupWithNavController para la Barra Google b/109868820
  • Se agregó un método NavigationUI.setupWithNavController para CollapsingToolbarLayout b/110887183
  • Ahora popBackStack() se muestra como falso cuando la pila de actividades está vacía o cuando el ID de destino proporcionado no está en la pila de actividades b/110893637
  • Ahora FragmentNavigator ignora las operaciones de navegación una vez que FragmentManager tiene el estado de guardado y evita las excepciones de "No se puede realizar esta acción después de onSaveInstanceState" b/110987825

Safe Args

  • Cambio rotundo: Los caracteres que no sean alfanuméricos en los nombres de acciones y argumentos se reemplazarán por capitalización medial en los nombres de métodos NavDirections respectivos.
    • P. ej.: DemoController.index se convertirá en setDemoControllerIndex b/79995048
    • P. ej.: action_show_settings se convertirá en actionShowSettings b/79642240
  • Cambio rotundo: Ahora, los argumentos se consideran no nulos de manera predeterminada. Para permitir los valores nulos en cadenas y argumentos parcelables, agrega app:nullable="true" b/79642307
  • Ahora puedes usar app:type="long" con defaultValues en forma de "123L" b/79563966
  • Ahora los argumentos parcelables están permitidos mediante el uso de un nombre de clase calificado para app:type. El único valor predeterminado permitido es "@null" b/79563966
  • Ahora las clases Args implementan equals() y hashCode() b/79642246
  • Ahora el complemento Safe Args se puede aplicar a proyectos de bibliotecas b/80036553
  • Ahora el complemento Safe Args se puede aplicar a proyectos futuros b/110011752

Correcciones de errores

  • Se corrigieron errores de navegación durante los métodos de ciclo de vida del fragmento. b/109916080
  • Se corrigieron problemas de navegación en gráficos anidados varias veces. b/110178671
  • Se solucionaron problemas durante el uso de setPopUpTo con el primer destino en el gráfico. b/109909461
  • Se solucionaron problemas en los que todos los valores app:defaultValue pasaban como cadenas. b/110710788
  • Ahora el aapt2 empaquetado con el complemento Gradle de Android 3.2 Beta 01 agrega reglas de mantenimiento para cada atributo android:name en los archivos XML de navegación. b/79874119
  • Se solucionó la pérdida de memoria durante el reemplazo del FragmentNavigator predeterminado. b/110900142

Versión 1.0.0-alpha02

7 de junio de 2018

Cambios en los comportamientos

  • Ahora FragmentNavigator usa setReorderingAllowed(true). b/109826220

  • Ahora Navigation usará URLDecodes para los argumentos analizados a partir de URL de vínculo directo. b/79982454

Correcciones de errores

  • Se corrigió una IllegalStateException que ocurría cuando se llamaba a la navegación desde métodos de ciclos de vida de Fragment. b/79632233

  • Ahora la navegación depende de la Biblioteca de compatibilidad 27.1.1 para corregir el parpadeo cuando se usan animaciones. b/80160903

  • Se corrigió una IllegalArgumentException que ocurría cuando se usaba defaultNavHost="true" como un fragmento secundario. b/79656847

  • Se corrigió un StackOverflowError que ocurría cuando se usaba NavDeepLinkBuilder. b/109653065

  • Se corrigió una IllegalArgumentException que ocurría cuando se navegaba hacia atrás en un gráfico anidado. b/80453447

  • Se corrigió un error con la superposición de Fragment que ocurría cuando se usaba launchSingleTop. b/79407969

  • Ahora la navegación crea la pila de actividades sintética correcta para gráficos anidados. b/79734195

  • Ahora NavigationUI resaltará el elemento correcto cuando se use un gráfico anidado como MenuItem. b/109675998

Cambios en la API

  • El atributo clearTask para acciones y la API asociada en NavOptions dejó de estar disponible. b/80338878

  • El atributo launchDocument para acciones y la API asociada en NavOptions dejó de estar disponible. b/109806636

Versión 1.0.0-alpha01

8 de mayo de 2018

Navigation proporciona un marco de trabajo para desarrollar la navegación desde la app. Este lanzamiento inicial es 1.0.0-alpha01.