Navigation

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

Actualización más reciente Versión estable actual Próxima versión potencial Versión Beta Versión Alfa
22 de enero de 2020 2.2.0 - - -

Cómo declarar dependencias

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

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

    dependencies {
      def nav_version = "2.1.0"

      // Java language implementation
      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"
            classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        }
    }
    

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

Para generar código de lenguaje Java adecuado para Java o módulos combinados de Java y Kotlin, agrega esta línea al 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"

Tienes que tener el objeto android.useAndroidX=true en tu archivo gradle.properties, según se indica 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 sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Versión 2.2.0

Versión 2.2.0

22 de enero de 2020

Lanzamiento de androidx.navigation:navigation-*:2.2.0. La versión 2.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.1.0

  • NavBackStackEntry: Ahora puedes llamar a NavController.getBackStackEntry() pasando el ID de un destino o gráfico de navegación en la pila de actividades. El objeto NavBackStackEntry que se muestra proporciona un elemento LifecycleOwner, ViewModelStoreOwner (el mismo que se muestra para NavController.getViewModelStoreOwner()) y SavedStateRegistryOwner controlado por Navigation, que proporciona los argumentos utilizados para iniciar ese destino.
  • Integración de Lifecycle ViewModel SavedState: SavedStateViewModelFactory ahora es el valor predeterminado de fábrica que se utiliza cuando se usan by navGraphViewModels() o el constructor ViewModelProvider con un ViewModelStoreOwner que muestran NavController.getBackStackEntry() o NavController.getViewModelStoreOwner().
  • Compatibilidad con parámetros de búsqueda para vínculos directos: Los vínculos directos que tienen parámetros de búsqueda ahora admiten parámetros reordenados. Los argumentos que tienen un valor predeterminado o que pueden ser nulos ahora son opcionales a la hora de hacer coincidir vínculos directos.
  • Compatibilidad mejorada para animaciones: NavHostFragment ahora usa FragmentContainerView de Fragment 1.2.0, que corrige problemas de ordenamiento z de animación y despacho de inserciones de ventana a elementos Fragment.

Versión 2.2.0-rc04

18 de diciembre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-rc04. La versión 2.2.0-rc04 contiene estas confirmaciones.

Correcciones de errores

  • Se ajustaron las animaciones de atenuación predeterminadas que usa navigation-ui para que coincidan con las ajustadas en Fragment 1.2.0-rc04. (b/145769814)

Versión 2.2.0-rc03

4 de diciembre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-rc03. La versión 2.2.0-rc03 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema relacionado con el análisis de vínculos directos cuando se usan parámetros de consulta y un argumento como la última parte de la ruta de acceso que impedía analizar más de un carácter del argumento de ruta final. (b/144554689)
  • Se solucionó un problema relacionado con el análisis de vínculos directos en los casos en los que los parámetros opcionales recibían "@null" en lugar de null. (b/141613546)
  • Ahora, NavHostFragment restablece correctamente el gráfico después de un cambio de configuración cuando se usa con FragmentContainerView. (b/143752103)

Cambios de dependencia

  • Navigation ahora depende de Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03, and Fragment 1.2.0-rc03 cuando corresponde.

Versión 2.2.0-rc02

7 de noviembre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-rc02. La versión 2.2.0-rc02 contiene estas confirmaciones.

Cambios de dependencia

  • Navigation ahora depende de androidx.lifecycle 2.2.0-rc02.

Versión 2.2.0-rc01

23 de octubre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-rc01 sin cambios desde 2.2.0-beta01. La versión 2.2.0-rc01 contiene estas confirmaciones.

Versión 2.2.0-beta01

9 de octubre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-beta01. La versión 2.2.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • NavDestination y sus subclases ahora anulan toString() para proporcionar más información útil durante la depuración. (b/141264986)

Cambios en el comportamiento

  • Ahora se ignoran los parámetros de búsqueda adicionales cuando se hacen coincidir vínculos directos en lugar de provocar que falle la coincidencia. (b/141482822)

Correcciones de errores

  • Se corrigió un problema en el que se ignoraban los argumentos en la ruta de un vínculo directo si también se especificaban los parámetros de búsqueda. (b/141505755)
  • La extensión de Kotlin navArgs() en Activity ahora muestra un mejor mensaje de error más claro cuando no hay extras. (b/141408999)
  • Las clases de Java Directions generadas por Safe Args ahora contienen valores predeterminados. (b/141099045)
  • Las clases de Java Args generadas por Safe Args ahora contienen valores predeterminados. (b/140123727)
  • Si se utiliza un objeto Toolbar, NavigationUI ya no anima el cambio de texto cuando se mueve entre dos destinos de nivel superior. (b/140848160)

Versión 2.2.0-alpha03

18 de septiembre de 2019

Lanzamiento de androidx.navigation:navigation-*:2.2.0-alpha03. La versión 2.2.0-alpha03 contiene estas confirmaciones.

Cambios en el comportamiento

  • Llamar a setViewModelStore() después de llamar a setGraph ahora genera un objeto IllegalStateException. Esto siempre debe establecerlo el objeto NavHost como parte de la configuración inicial para garantizar que todas las instancias de NavBackStackEntry tengan un almacenamiento coherente para las instancias de ViewModel. (aosp/1111821)

Correcciones de errores

  • Se corrigió un error de tipo ConcurrentModificationException cuando se usaban instancias de ViewModel asociadas a varias instancias de ViewModelStore en el ámbito de gráfico de navegación diferentes. (aosp/1112257)

Versión 2.2.0-alpha02

5 de septiembre de 2019

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

Nuevas funciones

  • Los vínculos directos que tienen parámetros de búsqueda ahora admiten parámetros reordenados. Los argumentos que tienen un valor predeterminado o que pueden ser nulos ahora son opcionales a la hora de hacer coincidir vínculos directos. (b/133273839)
  • Ahora puedes llamar a NavController.getBackStackEntry() pasando el ID de un destino o gráfico de navegación en la pila de actividades. El objeto NavBackStackEntry que se muestra proporciona un LifecycleOwner, ViewModelStoreOwner (el mismo que se muestra para NavController.getViewModelStoreOwner()) y SavedStateRegistryOwner, que proporciona los argumentos utilizados para iniciar ese destino. (aosp/1101691, aosp/1101710)

Correcciones de errores

  • Se corrigió un problema en el que agregar un objeto NavHostFragment a ViewPager2 generaba un error relacionado con un IllegalArgumentException. (b/133640271)
  • NavInflater ahora evita llamar a getResourceName() innecesariamente, lo que acelera el tiempo de inflación hasta en un 40%. (b/139213740)

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

  • SavedStateViewModelFactory ahora es la versión de fábrica predeterminada que se utiliza cuando se usa by navGraphViewModels() o el constructor ViewModelProvider con un objeto ViewModelStoreOwner mostrado por NavController.getViewModelStoreOwner(). (b/135716331)

Cambios en la API

Correcciones de errores

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

Versión 2.1.0

Versión 2.1.0

5 de septiembre de 2019

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

Cambios importantes desde la versión 2.0.0

  • Alcance de ViewModels a un gráfico de navegación: Ahora puedes crear objetos ViewModel con un alcance en el nivel del gráfico de navegación utilizando el objeto by navGraphViewModels() delegado de propiedad para usuarios de Kotlin mediante bibliotecas de -ktx la API de getViewModelStoreOwner() agregada a NavController. Para obtener más información, consulta Cómo compartir datos relacionados con la IU entre destinos con ViewModel.
  • Destinos de diálogo: Ahora puedes crear destinos de <dialog> que mostrarán un objeto DialogFragment cuando navigate a ellos. NavHostFragment admite destinos de diálogo de forma predeterminada. Para obtener más información, consulta Cómo crear un destino a partir de un DialogFragment.
  • Navegación por URI: Ahora puedes navigate mediante un objeto Uri, que usa el elemento <deepLink> que agregaste a un destino para navegar hasta allí. Para obtener más información, consulta Cómo navegar con URI.
  • NavHostController: Se movieron a NavHostController las API utilizadas específicamente para construir un objeto NavHost personalizado, lo que permite que las implementaciones conecten sus elementos NavController a los LifecycleOwner, OnBackPressedDispatcher y ViewModelStore de hosting.

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 dio de baja la API getViewModelStore() en NavController que se introdujo en 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ó una 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

  • NavigationUI ahora 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 varios elementos NavHostFragment con el mismo contenedor con findNavController(). b/136021571

Versión 2.1.0-alpha06

2 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

  • Se movió el atributo app:navGraph que usa NavHostFragment al artefacto navigation-runtime. Los navegadores personalizados que se pueden agregar a través de XML deben usar este atributo para lograr la integración con el panel Host del Editor de Navigation. (b/133880955)

Cambios en la API

  • Se dio de baja la API de getViewModelStore() en NavController para priorizar el nuevo método getViewModelStoreOwner() que muestra un objeto ViewModelStoreOwner. (aosp/987010)
  • La implementación de destinos de ventana flotante, como <dialog>, se generalizó en una interfaz de marcador, FloatingWindow, que ahora implementan todos los destinos <dialog>. Los métodos de NavigationUI para interactuar con la barra superior de aplicaciones ahora ignoran los destinos FloatingWindow. (b/133600763)

Cambios en el comportamiento

  • 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 <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 directo, 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 se las trasladó a una nueva subclase de NavController: NavHostController. (aosp/966091)
  • Se reemplazó el método NavController setHostOnBackPressedDispatcherOwner() por el objeto NavHostController del método setOnBackPressedDispatcher() y ahora requiere que llames a setLifecycleOwner() antes de llamar al método. (aosp/965409)
  • NavHostController ahora contiene un método enableOnBackPressed(boolean) que reemplaza 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 Navigation 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator ahora 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.

Errores 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 objeto DialogFragment cuando uses un elemento navigate en 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 el comportamiento

  • Las animaciones predeterminadas que proporciona 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

  • Se dio de baja el método createFragmentNavigator() de NavHostFragment y se movió su funcionalidad al nuevo método onCreateNavController() a fin de dejar más claro que este es el punto de entrada correcto para agregar navegadores personalizados cuando se subclasifica NavHostFragment. b/122802849
  • Se agregó un método hasDeepLink() a NavDestination para permitirte verificar si un elemento Uri determinado se puede administrar 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
  • NavHostFragment ahora intercepta los eventos Atrás del sistema con OnBackPressedDispatcher, lo que corrige un problema que se generaba cuando se realizaba la navegación condicional en los métodos del ciclo de vida de Fragment al mostrar un Fragment. b/111598096
  • Para Safe Args, un objeto 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 objetos ViewModel con un ámbito de gráfico de navegación mediante el delegado de propiedad by navGraphViewModels() para usuarios de Kotlin o mediante la API de 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 los destinos <activity> en un tiempo de inflación de clase, lo que evita que se produzcan ClassNotFoundExceptions cuando se usan 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

  • Navigation ahora depende de androidx.core:core:1.0.1 y androidx.fragment:fragment:1.1.0-alpha05. Esta versión también quita 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 crear un objeto de escucha de clics con un ID de recurso y un objeto Bundle. b/127631752
  • Se dio de baja FragmentNavigator.instantiateFragment. 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

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 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.

Tu proyecto debe haber migrado a AndroidX para usar versiones 2.X de Navigation. La versión 1.0 estable de Navigation será la última versión que use las dependencias de la biblioteca de compatibilidad. Los lanzamientos posteriores se basarán en AndroidX y se compilarán en función de la versión estable 2.0.

Dependencias anteriores a AndroidX

Para las versiones de Navigation 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 la siguiente ruta de clase en tu archivo build.gradle de nivel superior

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

Versión 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 corrigió un problema por el cual se ignoraba popBackStack() si el gráfico raíz no tenía un ID. b/126251695
  • El objeto navigateUp() ahora procesa 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 corrigió un problema con ActivityNavigator.applyPopAnimationsToPendingTransition que no aplicaba la animación de salida emergente correcta. b/126237567
  • El código de Kotlin generado por Safe Args ahora escapa correctamente 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 corrigió un problema que ocurrí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 el comportamiento

  • Ahora se priorizan las coincidencias exactas de vínculos directos por 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 de la pila de actividades, lo que corrige 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 objeto 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 innecesaria. 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 el comportamiento

  • Navigation ahora garantiza que los valores predeterminados de los argumentos se traten de forma idéntica durante el tiempo de ejecución y mediante Safe Args. Como consecuencia, solo los argumentos que poseen un objeto app:argType="reference" pueden tener un punto de valor predeterminado a otro recurso (por ejemplo, @color/colorPrimary). Si intentas usar un valor predeterminado de referencia con un app:argType diferente, se generará una excepción cuando se analice 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 de Gradle para Android. b/121304903
  • Se corrigió una regresión que generaba 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 corrigió un problema en el que se desincronizaban los estados FragmentNavigator y NavController, lo que provocaba un error IllegalStateException cuando se intentaba restaurar la pila de actividades. b/123803044
  • Se corrigió un problema en el que no aparecía la flecha hacia atrás que administra NavigationUI 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 apunta 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 revisión de 1.0.0-alpha10 que corrige un problema relacionado con Safe Args.

Correcciones de errores

  • Corrige un problema en 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

Errores conocidos

  • Safe Args no puede importar la clase Directions 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

  • Los usuarios de Kotlin ahora pueden usar el delegado de la propiedad by navArgs() para obtener de forma diferida una referencia a una clase NavArgs generada por Safe Args en un objeto Activity o Fragment. b/122603367
  • Safe Args ahora te permite generar código Kotlin aplicando el complemento androidx.navigation.safeargs.kotlin. El código 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 el comportamiento

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

Cambios rotundos

  • Se movió a ActivityNavigator el método NavOptions.applyPopAnimationsToPendingTransition() que permite aplicar animaciones emergentes a una actividad. b/122413117
  • Safe Args ahora evita duplicar clases idénticas para acciones sin argumentos. El tipo de datos que se muestra para los métodos sin argumentos de las clases NavDirections generadas ahora es NavDirections. b/123233147
  • Las clases Directions generadas por Safe Args ya no tienen un constructor público: solo debes 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 generarse mediante los métodos estáticos de las clases Directions generadas. b/122963206
  • El objeto Bundle que se muestra a partir de los getArguments() de NavDirections ahora se marca como @NonNull en lugar de @Nullable. b/123243957

Correcciones de errores

  • NavDeepLinkBuilder ahora procesa correctamente varios PendingIntent simultáneos al mismo destino mediante los argumentos que pasas para determinar la unicidad. b/120042732
  • NavController ahora procesa 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
  • NavigationUI ahora 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 de un destino. b/122962504
  • Las clases NavDirections de Safe Args generadas ahora tienen valores hashCode() iguales cuando el valor que muestra equals() es verdadero. b/123043662
  • FragmentNavigator ahora arroja un mensaje de error mejor si intenta crear elementos FragmentTransactions personalizados en el objeto 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 que se incluye más abajo.

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 de forma detallada en la charla de Actividad única de Android Dev Summit 2018, y seguiremos trabajando en la documentación adicional específica acerca de 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 argumento <argument> con un objeto argType="reference", Navigation ya no analiza la referencia, sino que proporciona el ID del recurso sin procesar. b/111736515
  • Ahora se muestra onNavDestinationSelected() 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 al objeto MenuItem para evitar que se muestre en 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

  • Ahora se analizan correctamente los argumentos 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 de manera correcta 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 que se incluye más abajo.

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 el objeto android:label con el argumento correcto. b/80267266
  • Ahora Navigation depende de la Biblioteca de compatibilidad 28.0.0. b/120293333

Cambios rotundos

  • Se modificó el nombre de OnNavigatedListener por OnDestinationChangedListener. b/118670572
  • Ahora OnDestinationChangedListener también pasa el Bundle de los argumentos. aosp/837142
  • Se quitaron los atributos app:clearTask y app:launchDocument, así como sus métodos asociados. Usa app:popUpTo con la raíz de tu gráfico para quitar todos los destinos de la 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
  • Se modificó el nombre de NavController.onHandleDeepLink 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 NavHostFragment.setGraph() que había dejado de estar disponible. aosp/835684
  • Se quitó el método NavigationUI.navigateUp(DrawerLayout, NavController) que había dejado de estar disponible. 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(). En cambio, llama a navigate() en el Navigator. 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

  • popUpTo ahora funciona de manera coherente cuando el destino es un elemento <navigation>. b/116831650
  • Se corrigieron errores que generaban un error IllegalArgumentException al usar 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 al llamar 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 arreglos 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

  • Se integró el módulo navigation-testing-ktx a 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 solucionaron las fallas que ocurren después de los cambios de configuración cuando se usan Navigators personalizados. b/110763345

Safe Args

  • Ahora Safe Args tiene una dependencia fija en el complemento de Gradle para Android 3.2.1. b/113167627
  • Ahora se pueden generar objetos Directions para las clases internas. b/117407555
  • Se corrigió un problema con la generación de objetos 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 asociados Safe Args de Gradle incluyen varios cambios de API, cambios en los comportamientos y correcciones de errores.

Cambios de comportamiento/API

  • NavHostFragment siempre establecerá el fragmento actual como 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 Atrás 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 asociados Safe Args de Gradle 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., se convertirá DemoController.index en setDemoControllerIndex. b/79995048
    • P. ej., se convertirá action_show_settings en actionShowSettings. b/79642240
  • Cambio rotundo: Ahora los argumentos se consideran no nulos de manera predeterminada. Para permitir valores nulos en strings y argumentos parcelables, agrega app:nullable="true". b/79642307
  • Ahora puedes usar app:type="long" con defaultValues in 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 de Args implementan equals() y hashCode(). b/79642246
  • Ahora se puede aplicar el complemento Safe Args a proyectos de bibliotecas. b/80036553
  • Ahora se puede aplicar el complemento Safe Args a proyectos destacados. 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 solucionó el problema por el que todos los valores app:defaultValue se pasaban como strings. 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 el comportamiento

  • 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ó un error IllegalStateException que se generaba 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ó un error IllegalArgumentException que se generaba cuando se usaba defaultNavHost="true" como fragmento secundario. b/79656847

  • Se corrigió un error StackOverflowError que se generaba cuando se usaba NavDeepLinkBuilder. b/109653065

  • Se corrigió un error IllegalArgumentException que se generaba cuando se navegaba hacia atrás en un gráfico anidado. b/80453447

  • Se corrigió un error relacionado con la superposición de Fragment que se generaba 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

  • Se dio de baja el atributo clearTask para acciones y la API asociada en NavOptions. b/80338878

  • Se dio de baja el atributo launchDocument para acciones y la API asociada en NavOptions. 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. Esta versión inicial es 1.0.0-alpha01.