Navegación

Navigation es un framework para navegar entre "destinos" dentro de una aplicación para Android que proporciona una API coherente, ya sea que los destinos se implementen como Fragment, Activity o algún otro tipo de componente.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
4 de septiembre de 2024 2.8.0 - - -

Cómo declarar dependencias

Para agregar una dependencia en Navigation, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio 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:

Groovy

dependencies {
  def nav_version = "2.8.0"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

}

Kotlin

dependencies {
  val nav_version = "2.8.0"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

}

Safe Args

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to 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.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 2.8

Versión 2.8.0

4 de septiembre de 2024

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

Cambios importantes desde 2.7.0

Seguridad de tipos de la DSL de Kotlin de Navigation

  • Navigation ahora proporciona seguridad de tipos para el DSL de Kotlin (que usa Navigation Compose) mediante la serialización de Kotlin para permitirte definir destinos en tu gráfico de navegación a través de objetos de tipo seguro y clases de datos:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

Consulta la entrada de blog sobre Navigation Compose Meet sobre la seguridad de tipos para obtener más información.

Atrás predictivo de Navigation Compose

  • Navigation Compose ahora ofrece compatibilidad con el gesto atrás predictivo dentro de la app a través de las nuevas APIs de SeekableTransitionState desde Compose-animation. Esto te permite usar el gesto atrás para ver el destino anterior con tu transición personalizada antes de decidir confirmar la transacción a través del gesto completado o cancelarla.

Fragmento de navegación componible

  • Se agregó un nuevo artefacto navigation-fragment-compose que incluye una alternativa de ComposableNavHostFragment a NavHostFragment que te permite agregar destinos componibles a tus archivos en formato XML de Navigation. Cada destino composable debe expresarse como un método @Composable de nivel superior, sin argumentos, cuyo nombre completamente calificado se use como el atributo android:name en cada destino. Cuando navegas a uno de estos destinos, se crea un fragmento contenedor para mostrar el contenido componible.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

Otros cambios

  • Navigation Compose ahora depende de Compose 1.7.0.
  • Navigation ahora proporciona una nueva clase CollectionNavType<T>, una subclase de NavType<T> para argumentos basados en colecciones, como lista, arrays y mapas. Todos los arrays NavType predeterminados (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType y StringArrayType) ahora se heredan de esta clase nueva.
  • NavType ahora tiene compatibilidad integrada con listas de Int, String, Booleano, Float y Long.

Versión 2.8.0-rc01

21 de agosto de 2024

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

Correcciones de errores

  • Se corrigió la falla de navegación cuando se pasan clases de enumeración de nivel superior como argumentos de tipo seguro. (I0ba76, b/358137294).
  • Navigation 2.8 ahora funciona correctamente con el SDK 34 y no se cambiará al SDK 35 hasta la versión 2.9 junto con el resto de las bibliotecas de AndroidX. (b/358798728).

Versión 2.8.0-beta07

7 de agosto de 2024

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

Errores conocidos

  • Debido a b/358137294, solo se admiten enums anidadas en otra clase desde el primer momento. Las enumeraciones de nivel superior se admitirán en la próxima versión.

Correcciones de errores

  • Cuando navegues a destinos duplicados o compartidos, la navegación priorizará el acceso al destino coincidente más cercano desde la ubicación actual en el gráfico. (Ic89a4, b/352006850).
  • Ahora la navegación en Safe Args agregó un nuevo elemento NavType.EnumType. Esto significa que los tipos de Enum ya no requieren elementos NavType personalizados. Ten en cuenta que el SerialName de Enum debe ser el nombre completamente calificado predeterminado. (I66d22, b/346475493).
  • La navegación en Safe Args agregó compatibilidad integrada para tipos de argumentos anulables,incluidos Int?, Long?, Float?, Boolean? y Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237).
  • El elemento startDestination de NavGraph ahora usará los valores de argumento predeterminados si la ruta startDestination que se pasa a NavGraph es exactamente igual a startDestination.route. (I13762, b/354046047).

Versión 2.8.0-beta06

24 de julio de 2024

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

Correcciones de errores

  • Se corrigió un problema por el que las comprobaciones de lint WrongStartDestinationType no buscaban objetos complementarios en el tipo de clase pasado, lo que provocaba que lint no detectara el error. (I92b09).

Versión 2.8.0-beta05

10 de julio de 2024

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

Correcciones de errores

  • Se corrigió la falla de navegación de singleTop cuando los elementos NavGraphs anidados comparten la misma ruta startDestination. (I17b94, b/294408596).

Versión 2.8.0-beta04

26 de junio de 2024

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

Correcciones de errores

  • Navigation ahora admite la navegación con strings vacías en argumentos de ruta de acceso. (Ic5dbd, b/339481310).
  • Mejora el mensaje de error para los serializadores personalizados declarados directamente en los campos de clase a través de @Serializable(with =...) para aclarar que, por el momento, esta es una función no compatible. (I052b0, b/341319151).
  • La API de prueba de SavedStateHandleFactory ahora se puede usar en pruebas que no sean de Android, pero requerirá que Robolectric admita el análisis de argumentos con Bundles (I76cdc, b/340966212).
  • Se corrigió la falla de restablecimiento del estado que se producía cuando se reanudaba la app después del cierre del proceso con el uso de navegación de tipo seguro en Compose. (Ia8f38, b/341801005).
  • Se corrigió un problema en Navigation Compose en el que, después de cancelar el gesto atrás predictivo, el NavBackStackEntry al que el usuario vuelve nunca vuelve al estado de ciclo de vida RESUMED. Esto también garantiza que el destino de retorno se vuelva a animar correctamente en lugar de ajustarse a su lugar después de un lanzamiento. (I97a0c, b/346608857).
  • Cuando uses el gesto atrás predictivo con Navigation Compose, el destino que se muestra ahora tendrá el orden Z adecuado y se animará correctamente sobre el destino entrante. (I2077b, b/345993681).

Versión 2.8.0-beta03

12 de junio de 2024

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

Cambios en la API

  • CollectionNavType tiene un nuevo método abstracto emptyCollection(). Anula esto para controlar una colección vacía que se haya pasado como argumento. (Ie4d84, b/341723133).

Correcciones de errores

  • Se agregó documentación sobre NavType.serializeAsValue y serializeAsValues para destacar que los resultados finales deben tener codificación URI. (Ida6bd, b/344943214).
  • Se corrigió una falla que se producía cuando se llamaba a toRoute<T> con un argumento CollectionNavType nulo. Cuando navegas con un CollectionNavType nulo, el argumento de salida será el valor predeterminado declarado en tu clase serializable o el valor que se muestra de emptyCollection() si no hay un valor predeterminado. (I84158, Id630f, b/342672856).

Versión 2.8.0-beta02

29 de mayo de 2024

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

Correcciones de errores

  • Se corrigió una falla de ClassCastException que se producía cuando se usaba NavBackStackEntry.toRoute con un NavType personalizado que acepta valores nulos. (I1c29b, b/342239473).
  • Se corrigieron los problemas de restablecimiento del estado de la pila de actividades de Navigation que se producían cuando se intentaba restablecer una entrada de pila de actividades a la que no se podía acceder mediante un ID desde el destino actual. Como las rutas están respaldadas por IDs, los destinos creados con rutas también se vieron afectados. Esto también corrige una falla causada por la llamada a clearBackStack() que tenía el mismo problema subyacente. (I423c3, b/339908057).

Versión 2.8.0-beta01

14 de mayo de 2024

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

Cambios en la API

  • SavedStateHandle.toRoute() ahora toma un parámetro typeMap para tipos de argumentos personalizados. (Ie39fb, b/339026523).
  • Se agregó una API de prueba a navigation-testing para crear un SavedStateHandle desde un objeto serializable de Kotlin. (Id4867, b/339080702).

Correcciones de errores

  • Se agregaron documentos de parámetros faltantes para las funciones DSL de Kotlin de Navigation. (I26a36).

Versión 2.8.0-alpha08

1 de mayo de 2024

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

Safe Args en Navigation Compose

  • Se completó el trabajo para admitir la seguridad de tipos de tiempo de compilación para Navigation Compose y los usuarios del DSL de Kotlin de Navigation basado en la serialización de Kotlin, y las APIs que antes eran experimentales ahora son estables.

Esta funcionalidad usa la serialización de Kotlin para permitirte definir destinos en tu gráfico de navegación a través de objetos de tipo seguro y clases de datos:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

Consulta la entrada de blog sobre Navigation Compose Meet sobre la seguridad de tipos para obtener más información.

Nuevas funciones

  • El artefacto navigation-fragment-compose ahora proporciona una composición LocalFragment local para métodos componibles dentro de un ComposableFragment. (If35e5).
  • NavType ahora tiene compatibilidad integrada con listas de Int, String, Booleano, Float y Long. (I4b6dd, Ia914c, b/188693139).

Versión 2.8.0-alpha07

17 de abril de 2024

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

Nuevas funciones

  • Agrega un nuevo artefacto navigation-fragment-compose que incluye una alternativa de ComposableNavHostFragment a NavHostFragment que te permite agregar destinos composable a tus archivos en formato XML de Navigation. Cada destino composable debe expresarse como un método @Composable de nivel superior, sin argumentos, cuyo nombre completamente calificado se use como el atributo android:name en cada destino. Cuando navegas a uno de estos destinos, se crea un fragmento contenedor para mostrar el contenido componible. (I0ef2e, b/265480755).

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

Cambios en la API

Versión 2.8.0-alpha06

3 de abril de 2024

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

Cambios en la API

  • Comenzó la compatibilidad con Safe Args en Navigation Compose con un enfoque basado en la serialización de Kotlin. Estas APIs no están terminadas y están marcadas con la anotación ExperimentalSafeArgsApi. Esta anotación se quitará cuando se complete toda la superficie de la API en una versión futura.

Correcciones de errores

  • NavHost ahora usaba Alignment.TopStart como argumento contentAlignment predeterminado Esto se alinea con el valor predeterminado para AnimatedContent y corrige algunas instancias de una escala inesperada desde la transición central. (I09e72, b/330111602).
  • Cuando se activa el gesto atrás predictivo mientras se usa Navigation Compose, NavHost ahora completará correctamente la transición personalizada en lugar de finalizar de inmediato. (I99017, b/327292110).

Versión 2.8.0-alpha05

20 de marzo de 2024

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

Nuevas funciones

  • Ahora puedes pasar argumentos al startDestination de NavGraph directamente en la ruta startDestination sin depender de defaultValue. Esto también se aplica a los objetos NavGraph startDestinations anidados. (I0e0b5, b/109505019, b/188693139).

Cambios en la API

  • Se agregó una nueva clase abstracta CollectionNavType<T>, una subclase de NavType<T> para argumentos basados en colecciones, como lista, arrays y mapas. (Ic6d63, b/188693139).
  • Todos los arrays NavType predeterminados (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType y StringArrayType) ahora son de tipo CollectionNavType. (Idcf79, b/188693139)
  • NavType ahora proporciona una nueva API de valueEquals abierta que determina si dos valores del mismo tipo son iguales entre sí. (I6cb97, b/327229511).

Correcciones de errores

  • Los parámetros de consulta en vínculos directos ahora permiten valores en forma de llaves alrededor del nombre del argumento (es decir, {argName}) como valores válidos para NavTypes basado en cadenas. Esto soluciona un problema en el que un valor de ese tipo se consideraría no válido (o ausencia de valor) para todos los tipos. (I18302, b/327274038).
  • Las funciones NavController que admiten rutas como navigate o popBackStack ahora pueden hacer coincidir correctamente las rutas llenas de argumentos del array NavTypes. (Iea805, b/327229511).

Versión 2.8.0-alpha04

6 de marzo de 2024

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

Nuevas funciones

  • Ahora puedes especificar el SizeTranform para tus transiciones en Navigation Compose si las defines como parte de la inicialización de las funciones composable o navigation. (I91062, b/296912651).

Correcciones de errores

  • Se solucionó un problema por el que NavHost en la navegación de Compose no mostraba correctamente la transición cuando se usaba el botón Atrás del sistema sin un gesto. (Iceeae, b/325998468).

Versión 2.8.0-alpha03

21 de febrero de 2024

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

Cambios en la API

  • NavBackStackEntry.savedStateHandle ahora está marcado como @MainThread, ya que usa código que, de todos modos, debe estar en el subproceso principal. (Ibb988, b/299523245).

Correcciones de errores

  • Se corrigió un problema en Navigation que causaba que los ViewModels de NavGraph fueran DESTROYED demasiado pronto porque el ViewModel de la entrada asociada no formaba parte del estado guardado. (Ib6bb7, b/317581849).

Actualización de dependencia

Versión 2.8.0-alpha02

7 de febrero de 2024

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

Nuevas funciones

  • Navigation Compose ahora ofrece compatibilidad con el gesto atrás predictivo dentro de la app a través de las nuevas APIs de SeekableTransitionState desde Compose-animation. Esto te permite usar el gesto atrás para ver el destino anterior con tu transición personalizada antes de decidir confirmar la transacción a través del gesto completado o cancelarla. (I8b8e9).

Versión 2.8.0-alpha01

24 de enero de 2024

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

Correcciones de errores

  • Se corrigió la fuga de BackStackState en la que múltiples llamadas a saveState en un destino provocaban que se guardaran varios estados, pero solo se podía restablecer el primero. (I598b0, b/309559751).
  • Se corrigió un problema por el que los argumentos que no eran de cadena no se mostraban correctamente cuando se usaban los asistentes de NavigationUI para propagar el título de las barras de la app. (#636, b/316676794).

Actualización de dependencia

Contribución externa

  • Gracias a SimonMarquis por solucionar el problema de visualización de argumentos que no son de cadena cuando se usan los asistentes de NavigationUI para propagar el título de las barras de la app.

Versión 2.7.7

Versión 2.7.7

7 de febrero de 2024

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

Correcciones de errores

  • Portabilidad a versiones anteriores de Navigation 2.8.0-alpha01: Se corrigió la fuga de BackStackState en la que varias llamadas a saveState() en un solo NavBackStackEntry provocaban el guardado de varios estados, pero solo se podía restablecer el primer estado guardado. (I598b0, b/309559751).
  • Portabilidad a versiones anteriores de Navigation 2.8.0-alpha01: Se corrigió un problema por el que los argumentos que no eran de cadena no se mostraban correctamente cuando se usaban los ayudantes NavigationUI para propagar el título de las barras de la app (#636, b/316676794).

Contribución externa

  • Gracias a SimonMarquis por solucionar el problema de visualización de argumentos que no son de cadena cuando se usan los asistentes de NavigationUI para propagar el título de las barras de la app.

Versión 2.7.6

Versión 2.7.6

13 de diciembre de 2023

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

Correcciones de errores

  • La función equals() NavGraph ahora considera correctamente los nodos del otro gráfico en lugar de solo el que realiza la llamada. Esto garantizará que los gráficos que tengan nodos con diferentes ID ya no se consideren iguales. (I401cb, b/311414915)

Versión 2.7.5

Versión 2.7.5

1 de noviembre de 2023

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

Mejoras de rendimiento

  • Se mejoró significativamente el rendimiento (tanto en términos de tiempo como de cantidad de asignaciones) al comparar dos gráficos. Esto significa que las llamadas como setGraph, que comparan internamente el gráfico nuevo con el existente son mucho más rápidas y producen menos fotogramas que se omiten. Agradecemos a Michał Z por el análisis exhaustivo que condujo a esta mejora. (I6ad62).
  • NavHost ahora renderizará el destino de inicio en el primer pase de composición, en lugar de tener que esperar a que el segundo pase lea el estado actualizado. (I439a7, b/304852206).

Correcciones de errores

  • Se solucionó un problema por el que aparecía tu pila de actividades si llamabas a setGraph más de una vez con exactamente el mismo gráfico solo si había un destino en tu gráfico que contenía una acción que vinculaba dos destinos. (Ieaed7).
  • Los diálogos a los que se haya navegado y descartado en una sucesión rápida ya no se filtrarán en la lista de NavController.visibleEntries. (I67586, b/287969970).
  • Cuando se abre una entrada seguida de un cambio de configuración, el ViewModel de la entrada se borrará correctamente si saveState es falso. (Idf242, b/298164648).
  • Se corrigió un problema por el que NavController podía controlar el mismo vínculo directo más de una vez si la pila de actividades estaba completamente vacía antes de un cambio de configuración o llamar a setGraph solo cuando el intent entrante tenía configurada la marca FLAG_ACTIVITY_NEW_TASK. (I73c7f).

Actualizaciones de dependencias

  • Navigation con Fragments ahora depende de Fragment 1.6.2, lo que corrige un problema por el que las instancias ViewModel de fragmentos anidados no se borraban cuando se llamaba a clearBackStack.

Versión 2.7.4

Versión 2.7.4

4 de octubre de 2023

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

Nuevas funciones

  • Se agregó compatibilidad para que popUpTo use rutas con argumentos que permitan volver a una entrada específica que use esos argumentos exactos, que coinciden con la compatibilidad encontrada en popBackStack. (I731f4, b/299255572).

Correcciones de errores

  • Se solucionó el problema por el que FragmentNavigator fallaba si interrumpiste una navegación con otra con popUpTo. (I3c848, b/301887045).
  • Se corrigió el problema por el que la pulsación de retroceso del sistema causaba que currentDestination no se actualizara correctamente para que coincidiera con el fragmento mostrado. (Id0d6c, b/289877514).
  • Ahora, el ciclo de vida de DialogFragment pasará al estado RESUMED correctamente cuando se descarte el diálogo anterior. (I88f0d, b/301811387).

Versión 2.7.3

Versión 2.7.3

20 de septiembre de 2023

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

Correcciones de errores

  • Se corrigió un problema en Navigation con fragmentos que causaba que la lista visibleEntries contenía entradas incorrectas. (I5caa9, b/288520638).
  • Se solucionó un problema que causaba que el destino de la ventana flotante (es decir, Dialogs, Bottomsheets, etc.) nunca obtuviera una devolución de llamada de ciclo de vida RESUMED. (I3b866, b/287505132).

Versión 2.7.2

Versión 2.7.2

6 de septiembre de 2023

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

Correcciones de errores

  • Navigation ahora depende de Lifecycle 2.6.2, lo que corrige una interacción entre rememberSaveable y NavHost de Navigation Compose que causaría que el estado rememberSaveable de los destinos y cualquier instancia de SavedStateHandle de ViewModel se restablezcan correctamente después del cierre y la recreación del proceso. (b/298059596, b/289436035).
  • Se solucionó un problema que se producía cuando se mostraban varios diálogos en Navigation Compose de forma simultánea en el que los diálogos parcialmente oscurecidos (p.ej., no el diálogo superior) estaban en el estado Lifecycle CREATED en lugar del estado STARTED. (aosp/2728520, b/289257213).
  • Se solucionó un problema que se producía cuando se mostraban varios diálogos en Navigation Compose de forma simultánea en el que descartar el diálogo superior hacía que el nuevo diálogo superior se atascara en el estado Lifecycle STARTED en lugar de moverse correctamente a RESUMED. (aosp/2629401, b/286371387).
  • Safe Args de Navigation ya no crea una instancia de su tarea con anticipación si no se está ejecutando. (I0e385, b/260322841).

Actualización de dependencia

  • Navigation Compose ahora depende de Compose 1.5.1.

Versión 2.7.1

Versión 2.7.1

23 de agosto de 2023

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

Correcciones de errores

  • Se corrigió un problema en Navigation con Compose en el que, cuando se usaba un Scaffold, era posible obtener un error al intentar acceder a un ViewModel de Lifecycle.State.DESTROYED. (I1dc11, b/268422136).

Versión 2.7.0

Versión 2.7.0

9 de agosto de 2023

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

Cambios importantes desde la versión 2.6.0

Animaciones del acompañante

Ahora que AnimatedContent es estable, pudimos volver a mover el código de Accompanist Navigation Animation a Navigation Compose.

Esto significa que toda la compatibilidad para configurar transiciones personalizadas que existía en AnimatedNavHost se admite directamente en NavHost.

No se realizarán cambios adicionales en Accompanist Navigation Animation, y pronto la daremos de baja formalmente, junto con la orientación sobre cómo migrar de nuevo a Navigation Compose en sí, pero será lo contrario a la guía de migración, sin necesidad de realizar otros cambios de API si ya usas la versión alfa más reciente de Accompanist (0.31.2-alpha). (b/197140101).

Correcciones de errores

  • NavHost en Navigation Compose ahora intercepta correctamente las llamadas inversas del sistema, incluso después de DETENER y REANUDAR la actividad. (Icb6de, b/279118447).

Actualizaciones de dependencias

  • Navigation ahora depende de Compose 1.5.0 desde 1.1.0.

Versión 2.7.0-rc01

26 de julio de 2023

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

Correcciones de errores

  • Se corrigió un problema por el que las lambdas EnterTransition y ExitTransition creadas como parte de NavHost podían permanecer en la memoria incluso después de quitar NavHost de la composición. (I893d0).

Errores conocidos

  • Existe un problema de Navigation 2.6.x que, cuando se navega con popUpTo, es posible que se genere una IllegalArgumentException. Es posible que se pueda evitar esta excepción si reestructura el gráfico, de manera similar a la sugerencia que se sugiere aquí. (b/287133013).

Versión 2.7.0-beta02

28 de junio de 2023

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

Correcciones de errores

  • Navigation Compose ahora tiene el orden Z correcto para las transiciones personalizadas que usan la navegación con la opción popUpTo (/Ib1c3a, b/285153947).

Versión 2.7.0-beta01

7 de junio de 2023

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

Correcciones de errores

  • NavHost en Navigation Compose ahora intercepta correctamente las llamadas de retroceso del sistema, incluso después de que Activity haya sido STOPPED y RESUMED. (Icb6de, b/279118447).

Versión 2.7.0-alpha01

24 de mayo de 2023

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

Animaciones del acompañante

Ahora que AnimatedContent es estable, pudimos volver a mover el código de Accompanist Navigation Animation a Navigation Compose.

Esto significa que toda la compatibilidad para configurar transiciones personalizadas que existía en AnimatedNavHost se admite directamente en NavHost.

No se realizarán cambios adicionales en Accompanist Navigation Animation, y pronto la daremos de baja formalmente, junto con la orientación sobre cómo migrar de nuevo a Navigation Compose en sí, pero será lo contrario a la guía de migración, sin necesidad de realizar otros cambios de API si ya usas la versión alfa más reciente de Accompanist (0.31.2-alpha). (b/197140101).

Correcciones de errores

  • A partir de Navigation 2.6.0-rc02: Se corrigió un problema con Navigation en Fragments por el que navegar con popUpTo y quitar un fragmento de la pila de actividades sin recrear su vista hacía que el sistema volviera a dejar de funcionar. (Ieb8d4, b/281726455).

Actualizaciones de dependencias

  • Navigation ahora depende de Compose 1.5.0-beta01.

Versión 2.6.0

Versión 2.6.0

7 de junio de 2023

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

Cambios importantes en Navigation desde 2.5.0

  • Los elementos arguments de NavBackStackEntry y arguments que se pasan a un OnDestinationChangedListener ahora son solo una copia de los argumentos inmutables que se crearon cuando navegaste al destino. Esto significa que los cambios que se realicen en esos Paquetes no se reflejarán en los accesos posteriores a arguments ni a otras instancias de OnDestinationChangedListener.
  • NavDeepLink ahora admite valores predeterminados para arrays, lo que permite admitir parámetros de consulta repetidos que se asignarán al tipo de array del argumento. NavType ahora también incluye un método predeterminado que se puede anular para combinar dos valores analizados
  • Las subclases personalizadas de NavType ahora pueden anular serializeAsValue para serializar un valor en una String, lo que permite que la serialización y la deserialización (a través de parseValue) se encapsulen por completo en la clase NavType. StringType ahora anula este método para llamar a Uri.encode en el String determinado

Cambios importantes en Navigation Compose desde 2.5.0

  • Cuando se obtiene una vista previa de un elemento componible con NavHost, ahora se mostrará el startDestination de NavGraph de forma predeterminada
  • Ahora, NavController.popBackStack(route), NavController.getBackStackEntry(route) y NavController.clearBackStack(route) admiten rutas con argumentos completados de forma parcial o completa. Ten en cuenta que los argumentos deben coincidir exactamente con los argumentos de la entrada
  • Si intentas crear un NavDeepLink vacío con el DSL de Kotlin navDeepLink, se mostrará una advertencia de lint que indicará que un vínculo directo necesita un URI, una acción o un tipo mime para que sea válido

Cambios importantes a Navigation con Fragments desde la versión 2.5.0

  • NavHostFragment ya no intercepta el botón Atrás del sistema. Esto permite que el FragmentManager subyacente controle el sistema. Esto permite que Fragment 1.7.0-alpha01 y versiones posteriores proporcionen una animación de atrás predictivo integrada en la app en dispositivos Android U.
  • Cuando uses Navigation con Fragments, ahora se mostrará una IllegalArgumentException si intentas hacer una FragmentTransaction de forma manual que agregue un fragmento a la pila de actividades de FragmentManager. Siempre debes agregar fragmentos a través de la API de navigate().
  • Cuando se usa la string exacta ${applicationId} como marcador de posición en los atributos app:data y app:dataPattern en el elemento de actividad de un archivo en formato XML de navegación, el marcador de posición se completará automáticamente con el packageName del contexto ante el aumento
  • FragmentNavigator ahora usa las APIs de transición cuando navegas y abres NavBackStackEntries. Esto significa que el Lifecycle de NavBackStackEntry ahora esperará a que se completen los efectos especiales de entrada y salida de los fragmentos antes de mover su Lifecycle.State final
  • DialogFragmentNavigator ahora usa las APIs de transición cuando navegas y abres NavBackStackEntries. Esto significa que el Lifecycle de NavBackStackEntry ahora esperará a que el Lifecycle de DialogFragment se mueva a DESTROYED antes de moverse a DESTROYED
  • NavHostFragment ahora te permite recuperar el NavController en cuanto se adjunte NavHostFragment al FragmentManager, en lugar de solo después de onCreate().
  • La compatibilidad de Navigation con los módulos de funciones dinámicos ahora depende de la biblioteca detallada de Play Feature Delivery
  • Safe Args de Navigation ahora depende de la versión 7.3.0 del complemento de Android para Gradle. Esto significa que ahora solo es compatible con las versiones 7.3.0 y posteriores.

Cambios importantes en NavigationUI desde la versión 2.5.0

  • Cuando se pasa el ID de un gráfico de navegación a AppBarConfiguration (como a través de un Menu), NavigationUI ahora solo considera el destino de inicio de ese gráfico de navegación como un destino de nivel superior, en lugar de marcar cada destino de forma incorrecta dentro del gráfico como destino de nivel superior. El comportamiento de pasar el ID de un destino individual no se modifica. Esta misma funcionalidad está disponible para tu propio código mediante la nueva función isTopLevelDestination en AppBarConfiguration
  • Las integraciones de setupWithNavController en NavigationUI para trabajar con la barra superior de la app ahora analizarán los valores R.string para los argumentos ReferenceType que se encuentran en tu android:label en sus valores de String, en lugar de generar el número entero de recurso creado automáticamente
  • NavigationUI ahora proporciona registros cuando no puede navegar a través de un MenuItem seleccionado

Versión 2.6.0-rc02

24 de mayo de 2023

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

Correcciones de errores

  • Se corrigió un problema con Navigation en Fragments por el que navegar con popUpTo y quitar un fragmento de la pila de actividades sin recrear su vista hacía que el sistema volviera a dejar de funcionar. (Ieb8d4, b/281726455).

Versión 2.6.0-rc01

10 de mayo de 2023

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

Correcciones de errores

  • Se corrigió un problema en Navigation con fragmentos por el que quitar un fragmento a través de la navegación con popUpTo en su devolución de llamada de ciclo de vida onResume() provocaba una IllegalStateException. (I21884, b/279644470).

Versión 2.6.0-beta01

19 de abril de 2023

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

Nuevas funciones

  • NavBackStackEntry ahora proporciona una implementación de toString personalizada. (Iff00b).

Correcciones de errores

  • Cuando uses Navigation con Fragments, ahora, cuando intentes hacer una FragmentTransaction de forma manual que agregue un fragmento a la pila de actividades de FragmentManager, se arrojará una IllegalArgumentException. Siempre debes agregar fragmentos a través de la API de navigate(). (I6d38e).
  • Cuando hay un navigate que agrega una entrada y un popBackStack que la quita en el mismo marco, la entrada superior resultante en la pila de actividades ahora volverá de manera coherente al Lifecycle.State de RESUMED. (Id8067, b/276495952).

Versión 2.6.0-alpha09

5 de abril de 2023

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

Correcciones de errores

  • Se corrigieron las verificaciones de rutas no válidas, de modo que, si un NavDestination contiene NavArgument no anulable, la ruta de este destino debe contener marcadores de posición para argumentos con el mismo nombre que el NavArgument no anulable. (Ic62bf, b/274697949).
  • Las navegaciones de vínculos directos basadas en Action/MimeType ahora fallarán si a la operación de navegación falta un NavArgument no anulable requerido por el NavDestination con el que coincide el Action/MimeType. (Ibfa17, b/271777424).
  • Cuando NavController establece un gráfico con la misma ruta y los mismos destinos que el gráfico anterior, ahora reemplaza correctamente los nodos del gráfico actuales y los destinos de la pila de actividades por instancias nuevas. Esto corrige una falla que se producía cuando se usaba onLaunchSingleTop sin guardar el estado en Navigation Compose. Esto también corrige un error por el que la navegación a destinos asociados con las compilaciones del gráfico raíz y la pila de actividades incorrecta (I5bc58, b/275258161, b/275407804).

Versión 2.6.0-alpha08

22 de marzo de 2023

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

Nuevas funciones

  • NavHostFragment ahora te permite recuperar el NavController en cuanto se adjunte NavHostFragment al FragmentManager, en lugar de solo después de onCreate(). (Ic6382, b/220186282).

Correcciones de errores

  • Se corrigió un error NullPointerException que se producía cuando se abría un gráfico anidado que incluye un argumento no anulable. (6b3581, b/249988437).
  • Cuando vuelvas a usar el sistema después de navegar con popUpTo, el estado de NavController aparecerá en la entrada correcta. (I3a8ec, b/270447657).
  • FragmentNavigator ahora mostrará correctamente las entradas cuando se muestre la pila de actividades mediante el botón Atrás del sistema o popBackStack(), y si la transacción usa o no efectos para el fragmento (I81bdf).
  • Cómo agregar fragmentos a FragmentNavigator FragmentManager sin usar la navegación ya no provocará fallas. (b17204, b/274167493).

Actualizaciones de dependencias

Versión 2.6.0-alpha07

8 de marzo de 2023

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

Correcciones de errores

  • Las variantes de la API getBackStackEntry, popBackStack y clearBackStack que toman rutas ahora toman patrones de ruta con argumentos anulables y parámetros de consulta anulables. (I22294, b/269302500)
  • Se solucionó un problema por el que, cuando se llamaba a clearBackStack() desde NavController, no se borraba el estado guardado en el administrador de fragmentos asociado con la pila de actividades borrada (Ic1cce, b/271190202).
  • Se corrigió una regresión en 2.6.0-alpha06 que causaba que se destacara el MenuItem incorrecto en BottomNavigationView cuando se usaba el botón Atrás del sistema entre pestañas. (I634f6, b/270447657).
  • Se corrigió la regresión en 2.6.0-alpha06 que causaba que los objetos NavBackStackEntry no se movieran al estado REANUDADO cuando se usaban Animation. (Ib3589, b/269646882).

Versión 2.6.0-alpha06

22 de febrero de 2023

Se lanzó androidx.navigation:navigation-*:2.6.0-alpha06. La versión 2.6.0-alpha06 contiene estas confirmaciones.

Nuevas funciones

  • Cuando se obtiene una vista previa de un elemento componible con NavHost, ahora se mostrará el startDestination de NavGraph de forma predeterminada (I2b89f).

Cambios en la API

  • Todas las sobrecargas de NavController navigate ahora tienen anotaciones con @MainThread para garantizar que se las llame en el subproceso principal (I2c0b0, b/263427111).

Correcciones de errores

  • Se solucionó una falla que se producía al intentar navegar mientras se usaba la navegación dinámica de fragmentos (I3ee29, b/268360479).
  • Se corrigió un error por el que la navegación a otro fragmento mediante el botón Atrás del sistema no actualiza la barra inferior al elemento seleccionado correcto (If559f, b/269044426).

Errores conocidos

  • Cuando usas Navigation con Fragments, el ciclo de vida de NavBackStackEntry no alcanza RESUMED cuando se usan las APIs de Animation. (b/269646882).
  • Cuando usas Navigation con Fragments y navegas con BottomNavigation, si intentas restablecer una pila de actividades con varias entradas, BottomMenuItem no se actualiza correctamente. (b/270447657).
  • Cuando usas Navigation con Fragments, después de restablecer el estado, el Lifecycle de NavBackStackEntry no obtiene DESTROYED cuando su fragmento es DESTROYED . (b/270610768).

Versión 2.6.0-alpha05

8 de febrero de 2023

Se lanzó androidx.navigation:navigation-*:2.6.0-alpha05. La versión 2.6.0-alpha05 contiene estas confirmaciones.

Nuevas funciones

  • Ahora, NavController.popBackStack(route), NavController.getBackStackEntry(route) y NavController.clearBackStack(route) admiten rutas con argumentos completados de forma parcial o completa. Ten en cuenta que los argumentos deben coincidir exactamente con los argumentos de la entrada (Iebd28, Ic678c, I3b37b, b/257514373).
  • FragmentNavigator ahora usa las APIs de transición cuando navegas y abres NavBackStackEntries. Esto significa que el Lifecycle de NavBackStackEntry ahora esperará a que se completen los efectos especiales de entrada y salida de los fragmentos antes de mover su Lifecycle.State final (I3cb19, b/238686802).
  • DialogFragmentNavigator ahora usa las APIs de transición cuando navegas y abres NavBackStackEntries. Esto significa que el Lifecycle de NavBackStackEntry ahora esperará a que el Lifecycle de DialogFragment se mueva a DESTROYED antes de moverse a DESTROYED (I53ee5, b/261213893).

Cambios en la API

  • NavigatorState ahora proporciona la API de prepareForTransition para permitir que los elementos Navigator muevan NavBackStackEntries a objetos Lifecycle.State intermedios (I42c21, b/238686802).
  • Ahora puedes acceder a la pila de actividades asociada con un NavGraphNavigator o un ComposeNavigator a través de una propiedad backstack. ComposeNavigator ahora también expone la devolución de llamada onTransitionComplete() para marcar un NavBackStackEntry que haya ejecutado como completa una navegación o una operación de popBackStack (I02062, I718db, b/257519195).

Correcciones de errores

  • El estado del navegador ahora no funcionará cuando se usen las APIs de push/popWithTransition y la entrada ya se esté controlando (Iadbfa, b/261213893).
  • Cuando se usa launchSingleTop con un elemento NavGraph anidado, todos los destinos que comienzan desde el destino original hasta su startDestination solo se agregarán, de forma correcta, a la parte superior de la pila de actividades (Id4bea, b/253256629).
  • Navigation reemplazará correctamente la instancia de DialogFragment cuando navegue al mismo destino con la marca launchSingleTop establecida como verdadera (I45b5a, b/149572817).
  • SafeArgs de Navigation ya no causará un error de compilación cuando se usen argumentos que tengan exactamente 19 caracteres (Id60bc, b/257110095).

Versión 2.6.0-alpha04

9 de noviembre de 2022

Se lanzó androidx.navigation:navigation-*:2.6.0-alpha04. La versión 2.6.0-alpha04 contiene estas confirmaciones.

Nuevas funciones

  • Las subclases personalizadas de NavType ahora pueden anular serializeAsValue para serializar un valor en una String, lo que permite que la serialización y la deserialización (a través de parseValue) se encapsulen por completo en la clase NavType. StringType ahora anula este método para llamar a Uri.encode en el String determinado (Ie5213, b/247637434).
  • NavigationUI ahora proporciona registros cuando no puede navegar a través de un MenuItem seleccionado (I2af5a, b/247730357).

Correcciones de errores

  • Los vínculos directos de navegación ahora se analizan de forma diferida en lugar de inicializarse con gráficos, lo que podría mejorar el rendimiento de la app al iniciarse (Iab0ab).
  • Se corrigió la falla que se generaba al navegar hacia arriba después de establecer un vínculo directo hacia un destino con argumentos predeterminados nulos (I51c24, b/243183636).

Actualización de dependencia

  • La compatibilidad de Navigation con los módulos de funciones dinámicos ahora depende de la biblioteca detallada de Play Feature Delivery (Ib4ddc).
  • Safe Args de Navigation ahora depende de la versión 7.3.0 del complemento de Android para Gradle. Esto significa que ahora solo es compatible con la versión 7.3.0 o posterior (I47e49).

Versión 2.6.0-alpha03

24 de octubre de 2022

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

Correcciones de errores

  • A partir de Navigation 2.5.3: NavHost ya no arrojará una NoSuchElementException cuando no haya un destino disponible para que el elemento Crossfade componga. Ahora simplemente omitirá la composición (Ieb46e, b/253299416).
  • A partir de Navigation 2.5.3, se corrigió un problema por el que no se olvidaba ni se quitaba el estado guardado de Compose (p. ej., los usos de rememberSaveable) cuando se quitaba un destino de la pila de actividades (I64949).

Actualizaciones de dependencias

Versión 2.6.0-alpha02

5 de octubre de 2022

Se lanzó androidx.navigation:navigation-*:2.6.0-alpha02. La versión 2.6.0-alpha02 contiene estas confirmaciones.

Cambios en el comportamiento

  • Cuando se pasa el ID de un gráfico de navegación a AppBarConfiguration (como a través de un Menu), NavigationUI ahora solo considera el destino de inicio de ese gráfico de navegación como un destino de nivel superior, en lugar de marcar cada destino de forma incorrecta dentro del gráfico como destino de nivel superior. El comportamiento de pasar el ID de un destino individual no se modifica. Esta misma funcionalidad está disponible para tu propio código mediante la nueva función isTopLevelDestination en AppBarConfiguration (Ie936e, b/238496771).

Correcciones de errores

  • El componente navigation:navigation-fragment ahora depende de la versión 1.5.2 de Fragment (I00ba4).
  • El elemento de menú seleccionado ya no se actualizará cuando se navegue a un destino FloatingWindow, como un diálogo (I4cde8, b/240308330).

Versión 2.6.0-alpha01

7 de septiembre de 2022

Se lanzó androidx.navigation:navigation-*:2.6.0-alpha01. La versión 2.6.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Las integraciones de setupWithNavController en NavigationUI para trabajar con la barra superior de la app ahora analizarán los valores R.string para los argumentos ReferenceType que se encuentran en tu android:label en sus valores de String, en lugar de generar el número entero de recurso creado automáticamente (I5f803, b/167959935).
  • NavDeepLink ahora admite valores predeterminados para arrays, lo que permite admitir parámetros de consulta repetidos que se asignarán al tipo de array del argumento. NavType ahora también incluye un método predeterminado que se puede anular para combinar dos valores analizados (Id68c3, b/209977108).
  • Cuando se usa la string exacta ${applicationId} como marcador de posición en los atributos app:data y app:dataPattern en el elemento de actividad de un archivo en formato XML de navegación, el marcador de posición se completará automáticamente con el packageName del contexto ante el aumento (Iaabde, b/234223561).
  • Si intentas crear un NavDeepLink vacío con el DSL de Kotlin navDeepLink, se mostrará una advertencia de lint que indicará que un vínculo directo necesita un URI, una acción o un tipo mime para que sea válido (I08d2f, b/154038883).

Cambios en la API

  • Se agregó una nueva función de extensión NavDestination para analizar etiquetas dinámicas con argumentos en forma de android:label="{arg}" en una String. Admite argumentos ReferenceType mediante el análisis de valores R.string en sus valores de String (I07d89, b/236269380).

Cambios en el comportamiento

  • El arguments de NavBackStackEntry y el arguments pasado a un OnDestinationChangedListener ahora son solo una copia de los argumentos inmutables que se crearon cuando navegaste al destino. Esto significa que los cambios que se realicen en esos paquetes no se reflejarán en los accesos posteriores a arguments o a otras instancias de OnDestinationChangedListener (I676f5).

Correcciones de errores

  • Desde Navigation 2.5.2: La navegación dinámica ahora intenta instalar correctamente los destinos de Activity desde otros módulos antes de navegar a ellos (Ia2c16, b/240292838).
  • A partir de Navigation 2.5.2: Navigation reemplazará correctamente la instancia de Fragment cuando navegue al mismo destino y establezca la marca launchSingleTop como verdadera (I5a2f1, b/237374580).
  • A partir de Navigation 2.5.2: Se corrigió IllegalStateException que se producía por la navegación a un gráfico anidado doble que compartía un elemento superior con un nuevo destino de inicio emergente (I9f7cb, b/243778589).

Versión 2.5

Versión 2.5.3

24 de octubre de 2022

Se lanzó androidx.navigation:navigation-*:2.5.3. La versión 2.5.3 contiene estas confirmaciones.

Correcciones de errores

  • NavHost ya no provocará una NoSuchElementException cuando no hay un destino disponible para que Crossfade componga. Ahora simplemente omitirá la composición (Ieb46e, b/253299416).
  • Se corrigió un problema por el que no se olvidaba ni se quitaba el estado guardado de Compose (p. ej., los usos de rememberSaveable) cuando se quitaba un destino de la pila de actividades (I64949).

Versión 2.5.2

7 de septiembre de 2022

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

Correcciones de errores

  • La navegación dinámica ahora intenta instalar correctamente los destinos de Activity desde otros módulos antes de navegar a ellos (Ia2c16, b/240292838).
  • Navigation reemplazará correctamente la instancia de Fragment cuando navegue al mismo destino y establezca la marca launchSingleTop como verdadera (I5a2f1, b/237374580).
  • Se corrigió IllegalStateException que se producía por la navegación a un gráfico anidado doble que compartía un elemento superior con un nuevo destino de inicio emergente (I9f7cb, b/243778589).

Actualización de dependencia

Versión 2.5.1

27 de julio de 2022

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

Correcciones de errores

  • Navigation Safe Args ya no generará advertencias de baja en las clases generadas cuando se usen tipos de argumentos personalizados guardados en un Bundle (Id86ed, b/237725966).

Actualizaciones de dependencias

Versión 2.5.0

29 de junio de 2022

Se lanzó androidx.navigation:navigation-*:2.5.0. La versión 2.5.0 contiene estas confirmaciones.

Cambios importantes desde 2.4.0

  • Integración de CreationExtras: Navigation ahora puede proporcionar un ViewModelProvider.Factory sin estado a través del CreationExtras de Lifecycle 2.5.0.

Safe Args de Navigation

  • Navigation Safe Args actualizó la dependencia Android Gradle Plugin a fin de basarse en 7.0.4, lo que dejó de brindar compatibilidad con las versiones de AGP antes de 7.0.
  • Se agregó compatibilidad con el atributo de espacio de nombres build.gradle que se usará en lugar de applicationId.

Otros cambios

  • La API de visibleEntries ya no es experimental y proporciona una función para recuperar todas las entradas cuyo destino es visible actualmente de acuerdo con NavController.

Versión 2.5.0-rc02

15 de junio de 2022

Se lanzó androidx.navigation:navigation-*:2.5.0-rc02. La versión 2.5.0-rc02 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió una falla causada por el cambio rápido entre destinos inferiores cuando se usaba NavHost de Navigation Compose. (I3979a, b/234054916)
  • Navigation SafeArgs ya no fallará cuando se use un applicationIdSuffix y un espacio de nombres sin applicationId, o cuando applicationId y el espacio de nombres difieran. (I754b1, b/233119646)
  • NavArgument ahora tiene una función toString() personalizada para mostrar los valores internos del argumento. (I900a8)

Versión 2.5.0-rc01

11 de mayo de 2022

Se lanzó androidx.navigation:navigation-*:2.5.0-rc01. La versión 2.5.0-rc01 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva regla de lint para evitar colocar elementos <deeplink> dentro de los elementos <activity> del archivo navigation.xml (Ic15a5, b/178403185).

Correcciones de errores

  • Los alcances de los elementos componibles NavHost y DialogHost ahora están en el orden esperado, es decir, los elementos internos que admiten composición se desechan antes que los elementos externos componibles (I157e6).
  • SafeArgs de Navigation ahora usa PathSensitivity.RELATIVE en ArgumentsGenerationTask para permitir la reubicación de la caché. Esto significa que la entrada de caché ahora se puede volver a usar de una compilación de CI en una compilación local (I5f67c, b/173420454).
  • Se actualizó la regla de lint UnrememberedGetBackStackEntryDetector para garantizar que la llamada a remember que rodea a la llamada a getBackStackEntry() también pase un objeto NavBackStackEntry como clave (Ib7081, b/227382831).

Versión 2.5.0-beta01

20 de abril de 2022

Se lanzó androidx.navigation:navigation-*:2.5.0-beta01. La versión 2.5.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • DialogNavigator ahora usa popWithTransition cuando ejecuta una llamada de dismiss(). Esto corrige una condición de carrera cuando se usa un elemento ViewModel dentro del destino dialog que causaba un IllegalStateException cuando se descartaba el diálogo, ya sea al volver a usar el sistema o presionar fuera del diálogo para salir (Id7376, b/226552301).

Actualizaciones de dependencias

  • Navigation ahora depende de Lifecycle 2.5.0-beta01 y corrige un objeto IllegalStateException cuando se anida un NavHost dentro de otro NavHost en una pestaña de navegación inferior que no es la principal cuando se usan varias pilas de actividades.

Versión 2.5.0-alpha04

6 de abril de 2022

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

Cambios en la API

Correcciones de errores

  • NavHost ahora depende de visibleEntries de NavController para determinar qué entradas componer. Esto significa que, cuando se usa el NavHost anidado, el objeto NavHost interno ahora debe animarse correctamente. (I4ba2b, b/225394514)
  • El StateFlow de visibleEntries que proporciona NavController ahora se basa en el estado máximo del ciclo de vida de la entrada, en lugar del estado actual del ciclo de vida. Esto significa que, incluso si el ciclo de vida del host de navController es inferior a STARTED, la lista de valores enteros visibles seguirá siendo la misma. (I9e2a8, b/225394514)
  • SavedStateViewFactory ahora admite el uso de CreationExtras, incluso cuando se inicializó con un SavedStateRegistryOwner. Si se proporcionan elementos adicionales, se ignoran los argumentos inicializados (I6c43b, b/224844583).
  • Ahora, NavDeepLink puede analizar los URI con un solo parámetro de consulta sin valor. (I0efe8, b/148905489)
  • Las strings vacías ahora se consideran argumentos válidos en vínculos directos. (I70a0d, b/217399862)
  • Navigation Safe Args ya no fallará cuando se usen espacios de nombres y no haya AndroidManifest.xml. (I17ccf, b/227229815)

Versión 2.5.0-alpha03

23 de febrero de 2022

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

Cambios en la API

  • Ahora puedes pasar CreationExtras a by navGraphViewModels para crear un ViewModel (I29217, b/217618359).

Correcciones de errores

  • NavDeepLinks ahora admite correctamente nuevos caracteres de línea codificados incorporados en los URI de rutas o vínculos directos (I513d1, b/217815060).
  • CreationExtras ahora funcionará correctamente cuando se use con NavBackStackEntries para crear ViewModels (I69161, b/217617710).
  • Safe Args de Navigation ahora admite el uso del espacio de nombres definido en build.gradle en lugar del paquete en el AndroidManifest (I659ef, b/217414933).

Versión 2.5.0-alpha02

9 de febrero de 2022

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

Correcciones de errores

  • A partir de Navigation 2.4.1: NavHostFragment ahora configurará correctamente OnBackPressedDispatcher cuando se use la vinculación de vista con gráficos anidados. (Ifbb51, b/214577959).
  • A partir de Navigation 2.4.1: Cuando uses un vínculo directo a través de varios NavGraph anidados, ahora la pila de actividades incluirá correctamente los destinos de inicio intermedios (I504c0, b/214383060).

Versión 2.5.0-alpha01

26 de enero de 2022

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

Nuevas funciones

Correcciones de errores

  • Se solucionó un problema en el que fallaba el acceso a un ViewModel creado a través de by navGraphViewModels() desde un onCreate() de Fragment con un IllegalStateException. (I8a14d)
  • Los elementos NavDeepLink ya no decodificarán innecesariamente los argumentos dos veces, lo que significa que los argumentos adecuados ahora se pasan a tu destino final. (I31b0a, b/210711399)

Safe Args

  • Safe Args ahora depende de la versión 7.0.4 del complemento de Android para Gradle. Por lo tanto, Safe Args de Navigation ya no será compatible con versiones de Android Studio anteriores a 7.0, pero ahora es compatible con el complemento de Android para Gradle 7.1.0 y versiones posteriores. (I41c88, b/213086135, b/207670704)

Versión 2.4.2

Versión 2.4.2

6 de abril de 2022

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

Correcciones de errores

Versión 2.4.1

Versión 2.4.1

9 de febrero de 2022

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

Correcciones de errores

  • Ahora, NavHostFragment establecerá correctamente el elemento OnBackPressedDispatcher cuando se use la vinculación de vistas con gráficos anidados (Ifbb51, b/214577959).
  • Cuando se vinculen de forma correcta varios NavGraph anidados, la pila de actividades ahora incluirá correctamente los destinos de inicio intermedios (I504c0, b/214383060).
  • Portabilidad a versiones anteriores de Navigation 2.5.0-alpha01: Se corrigió un problema por el que acceder a un ViewModel creado a través de by navGraphViewModels() desde el onCreate() de un fragmento fallaba con un IllegalStateException (I8a14d).
  • Portabilidad a versiones anteriores de Navigation 2.5.0-alpha01: Los NavDeepLink ya no decodifican los argumentos innecesariamente dos veces, lo que significa que los argumentos decodificados de manera correcta ahora se pasan a tu destino final. (I31b0a, b/210711399).
  • Portabilidad a versiones anteriores de Navigation 2.5.0-alpha01: Safe Args ahora depende de la versión 7.0.4 del complemento de Android para Gradle. Por lo tanto, Safe Args de Navigation ya no será compatible con versiones de Android Studio anteriores a 7.0, pero ahora es compatible con el complemento de Android para Gradle 7.1.0 y versiones posteriores (I41c88, b/213086135, b/207670704).

Versión 2.4.0

Versión 2.4.0

26 de enero de 2022

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

Cambios importantes desde la versión 2.3.0

  • Todos los artefactos de Navigation se reescribieron en Kotlin. Esto mejoró la nulabilidad de las clases que usan elementos genéricos (como las subclases de NavType). Todas las funciones de extensión de Kotlin que solían formar parte de los artefactos -ktx se movieron a sus respectivos artefactos principales. Los artefactos -ktx seguirán publicándose, pero estarán completamente vacíos.
  • El artefacto navigation-fragment ahora contiene una implementación compilada previamente de un diseño de dos paneles mediante el nuevo AbstractListDetailFragment. Este fragmento usa un SlidingPaneLayout para administrar un panel de lista (que proporciona la subclase) y un panel de detalles, que utiliza un NavHostFragment como su implementación, tal como se ve en nuestra implementación de ejemplo.
  • El método currentBackStackEntryAsFlow() en NavController proporciona un Flow que se emite cada vez que cambia el NavBackStackEntry actual. Este flujo se puede usar como alternativa a la administración manual de un OnDestinationChangedListener.
  • NavController ahora ofrece la capacidad de recuperar una lista de todas las instancias NavBackStackEntry visibles como un StateFlow a través de la propiedad visibleEntries experimental.
  • Ahora es posible extender la clase NavType para crear objetos NavTypes personalizados. Los tipos personalizados solo se admiten cuando se compila el gráfico de navegación de manera programática, por ejemplo, a través del DSL de Kotlin de Navigation Graph.
  • Navigation ahora brinda las API de findStartDestination() y getHierarchy() que se pueden usar para implementar un método NavigationUI personalizado. findStartDestination() es una función de extensión de NavGraph que ubicará el destino de inicio real que se mostrará cuando navegues al gráfico, incluso si startDestination es un NavGraph anidado. getHierarchy() es una función en NavDestination que se puede usar para verificar si un destino determinado está dentro de la jerarquía de otro.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Se actualizaron los métodos NavigationUI que tomaban un elemento BottomNavigationView para que, en su lugar, tomen NavigationBarView, la superclase que se introdujo en Material 1.4.0. De esta manera, se permite usar estos métodos con NavigationRailView.

  • Cuando se aumenta un elemento <action> mediante XML, los atributos de animación pueden usar atributos que se extraen de tu tema por medio de la sintaxis app:enterAnim="?attr/transitionEnter".

  • Safe Args ahora genera un método fromSavedStateHandle() para cada clase NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

Rutas de Navigation y el DSL de Kotlin

Las versiones anteriores de Navigation dependían de que cada destino tuviera un ID de número entero constante que lo identificara de forma exclusiva en sus destinos del mismo nivel y permitiera usar navigate() hacia ese destino de forma directa o mediante una acción. Si bien esto sigue siendo válido y útil, especialmente en los casos en los que defines tu gráfico de navegación en XML y puedes usar constantes R.id generadas automáticamente o Safe Args (que usa esas constantes para generar código en el tiempo de compilación), este sistema de números enteros únicos no capturaron el significado y la expresividad semántica necesarios para admitir gráficos completamente dinámicos creados de manera programática en el tiempo de ejecución a través del DSL de Kotlin de Navigation.

Esta versión introduce una nueva opción para identificar de forma exclusiva un destino en un gráfico de navegación por su ruta. Una ruta es una String que define la ruta única a un destino. Todos los métodos de DSL de Kotlin que tomaron un ID de destino ahora están obsoletos y se reemplazaron por una API equivalente que toma una ruta.

Cada ruta se debe tratar como la parte de la "ruta de acceso" de un elemento Uri que define ese destino, p. ej., home, profile/{userId}, profile/{userId}/friends, etc. Cuando la identidad de un destino está asociada con un contenido específico, esos argumentos dinámicos deben formar parte de la ruta y seguir las mismas reglas que vínculos directos implícitos.

Todas las API de NavController que antes solo tomaban un ID tienen una sobrecarga que toma una ruta String. Esto incluye navigate(), popBackStack(), popUpTo() y getBackStackEntry().

Esto tuvo algunas consecuencias en las API:

  • Se dio de baja a la propiedad popUpTo en el DSL de Kotlin y se la reemplazó por popUpToId.
  • Se dio de baja la API de getStartDestination() y se la reemplazó por getStartDestinationId().

A diferencia de cuando navegas por ID, la navegación por ruta sigue las mismas reglas que los vínculos directos implícitos, ya que puedes navegar directamente a cualquier destino en cualquier gráfico anidado, lo que garantiza que estas rutas se puedan utilizar en proyectos de varios módulo sin agregar de manera explícita un vínculo directo visible de forma externa a cada destino.

Navigation Compose

El artefacto navigation-compose proporciona integración entre el componente Navigation y Jetpack Compose. Usa funciones @Composable como los destinos en tu aplicación.

En esta versión, se proporciona lo siguiente:

  • Un elemento componible NavHost que te permite construir tu gráfico de navegación mediante un DSL de Kotlin, con destinos composable y dialog, además de compatibilidad con Navigators opcionales, como los de Accompanist Navigation Material.
  • Compatibilidad obligatoria para el encadenado entre destinos. Se puede usar Accompanist Navigation Animation para controlar las transiciones de entrada y salida con las API experimentales de Compose.
  • Alcance de un Lifecycle a cada destino que admite composición. Cada destino solo alcanza el estado RESUMED cuando las transiciones que ingresan finalizan y de inmediato pasan a STARTED cuando se inicia cualquier transición de salida, lo que te permite evitar todas las IllegalStateException y problemas multitáctiles con solo activar una llamada a navigate cuando el Lifecycle está RESUMED.
  • Alcance de ViewModel (a través de la API de viewModel() de Lifecycle ViewModel Compose 2.4.0 o hiltViewModel() de Hilt Navigation Compose 1.0.0 en el nivel de destino, lo que proporciona un alcance que sobrevive a los cambios de configuración y está en la pila de actividades (cuando tu contenido de Composable se compone de otra manera) y una señal en el onCleared() de ViewModel que indica la eliminación permanente y la limpieza del estado asociado con esa NavBackStackEntry.
  • Alcance del estado rememberSaveable a nivel del destino, lo que garantiza que todos los estados que admiten composición se guarden y restablezcan automáticamente cuando regreses a un destino.
  • Compatibilidad total para guardar y restablecer el estado de NavController y el estado de su destino después del cierre del proceso y de su recreación.
  • Integración automática con el botón Atrás del sistema
  • Compatibilidad para pasar argumentos, adjuntar vínculos directos a los destinos y retroceder un resultado a destinos anteriores

  • Ayudantes específicos de Compose en rememberNavController() y currentBackStackEntryAsState() para permitir elevar el estado y conectar el objeto NavController con elementos que admiten composición fuera de NavHost (como una barra de navegación inferior)

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

Consulta la guía de navegación con Compose para obtener más información.

Varias pilas de actividades

NavController es responsable de administrar la pila de actividades de los destinos, de agregar destinos a la pila de actividades cuando navigate() hacia ellos y de quitarlos cuando llamas a popBackStack() o activas el botón Atrás del sistema. Se expandió la clase NavOptions existente y la integración en elementos <action> del archivo XML del gráfico de navegación para poder guardar y restablecer la pila de actividades.

Como parte de este cambio, los métodos NavigationUI de onNavDestinationSelected(), BottomNavigationView.setupWithNavController() y NavigationView.setupWithNavController() ahora guardan y restablecen automáticamente el estado de los destinos agregados, lo que permite admitir varias pilas de actividades sin ningún cambio en el código. Cuando se usa Navigation con Fragments, esta es la forma recomendada de integración con varias pilas de actividades.

Las API subyacentes para guardar y restablecer el estado se exponen a través de varias superficies:

  • En el archivo XML de Navigation, el elemento <action> ahora puede usar los atributos booleanos de app:popUpToSaveState y app:restoreState para guardar el estado de los destinos que se agregaron mediante app:popUpTo y restaurar el estado asociado al destino que se pasa como app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • En el DSL de Kotlin navOptions, puedes agregar la propiedad booleana restoreState y la propiedad booleana saveState en el compilador popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • En la compilación manual de un objeto NavOptions mediante NavOptions.Builder, puedes usar el setRestoreState() y la sobrecarga nueva en setPopUpTo() que toma un parámetro saveState adicional.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Las llamadas programáticas a popBackStack() ahora pueden incluir un parámetro saveState adicional.

  • Puedes usar el método clearBackStack() para borrar cualquier estado que se haya guardado con popBackStack() o popUpToSaveState.

En todos los casos, NavController guardará y restablecerá el estado de cada NavBackStackEntry, incluidas todas las instancias de ViewModel con alcance de destino de navegación. Se actualizaron las API de Navigator para que cada Navigator permita guardar y restablecer su propio estado.

Cambios en el comportamiento

  • NavDeepLinkBuilder ahora agrega PendingIntent.FLAG_IMMUTABLE al PendingIntent que muestra createPendingIntent(), lo que garantiza que esta API funcione como se espera cuando se orienta a Android 12.
  • Navigation actualmente depende de Lifecycle2.3.1 y ahora marca a setGraph(), popBackStack(), navigateUp() y navigate(), los métodos que actualizan el NavBackStackEntry Lifecycle, como@MainThread, lo que alinea a Navigation con la aplicación de subprocesos principal que se introdujo en Lifecycle 2.3.0.
  • Ahora, los vínculos directos verifican que todos los argumentos necesarios (los que no tienen valores predeterminados) estén presentes en Uri.
  • Los argumentos analizados de NavDeepLink ahora consideran a los signos numerales de la misma manera que los signos de interrogación como separadores entre segmentos de ruta, lo que evita que un argumento abarque el signo numeral.
  • Cuando se generan acciones, el código de Kotlin que se crea desde Safe Args ahora coloca los argumentos sin valores predeterminados antes de aquellos que sí los tienen como parámetros.
  • Cuando se generan argumentos, Safe Args ahora coloca los parámetros sin valores predeterminados antes de los que sí tienen.
  • Safe-Args ahora depende del complemento de Android para Gradle 4.2.0. Es decir, ya no deberías recibir una advertencia cuando uses applicationIdTextResource.

Errores conocidos

  • Corrección en Navigation 2.5.0-alpha01: el acceso a un ViewModel creado a través de by navGraphViewModels() desde el onCreate() de un fragmento fallará con una IllegalStateException. (b/213504272)
  • Corrección en Navigation 2.5.0-alpha01: Safe Args 2.4.0 no es compatible con el complemento de Android para Gradle 7.1.0 ni versiones posteriores. (b/213086135)
  • Los vínculos directos con varios gráficos de navegación anidados no crean correctamente la pila de actividades completa (b/214383060).

Versión 2.4.0-rc01

15 de diciembre de 2021

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

Cambios en el comportamiento

  • Los argumentos analizados de NavDeepLink ahora consideran los signos numerales de la misma forma que signos de interrogación como separadores entre argumentos (I21309, b/180042703).

Correcciones de errores

  • Los vínculos directos ya no ignorarán los argumentos con valores que sean iguales al nombre del marcador de posición (If8017, b/207389470).
  • NavController ya no fallará cuando se muestre un destino anidado mediante transiciones después de que se haya restablecido NavController (I0f7c9, b/205021623).
  • El mensaje de error cuando se usa una startDestination no válida ahora será la ruta de destino de inicio predeterminada si hay una disponible (I86b9d, b/208041894).

Correcciones de errores de Navigation Compose

  • Se corrigió la posible falla que se genera con el cambio rápido entre el destino de inicio y otro destino mediante elementos de menú de navegación inferior (Ic8976, b/208887901).
  • Ahora se restablece correctamente el destino del diálogo en la parte superior de la pantalla después de los cambios de configuración o la finalización del proceso (I4c0dc, b/207386169).
  • Se corrigió un problema en el que no se podía recuperar un ViewModel de NavBackStackEntry de un diálogo cuando este se descartaba (I6b96d, b/206465487).
  • Se corrigió un problema que se producía cuando se usaban destinos activity con NavHost de Navigation Compose que daba como resultado recomposiciones infinitas (I8f64c).
  • Se corrigió una pérdida en Navigation Compose en la que se guardaba una referencia de la actividad anterior después de un cambio en la configuración o la finalización de un proceso (I4efcb, b/204905432).

Correcciones de errores de Safe Args

  • SafeArgs ya no falla cuando intenta restablecer arreglos parcelables personalizados después de la finalización del proceso (I618e8, b/207315994).
  • Se corrigió un error en Safe Args que no permitía que los arreglos booleanos tuvieran un valor null (I8c396, b/174787525).

Versión 2.4.0-beta02

3 de noviembre de 2021

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

Cambios en la API

  • El manejo de los vínculos directos implícitos y explícitos ahora agrega automáticamente la marca saveState cuando se navega a otro gráfico, lo que garantiza que ese código, como NavigationUI.setupWithNavController y el código que utiliza varios pilas de actividades, funcione como se espera. (Ic8807)

Cambios en el comportamiento

  • Los patrones de vínculos directos ahora se compilan de forma diferida en NavDeepLink, en lugar de hacerlo durante el período de aumento. Esto debería mejorar el tiempo de aumento de los gráficos de navegación que incluyen vínculos directos. (b8d257, b/184149935)

Correcciones de errores

  • Se corrigió un problema en el que los NavBackStackEntries se desplazaban hacia abajo hasta Lifecycle.State.CREATED después de moverse a Lifecycle.State.STARTED cuando NavHost se agregaba directamente al setContent() de la actividad. (Ia5ac1, b/203536683)
  • Se corrigió una condición de carrera en la que, en el caso de que quitar un destino DialogFragment de la pila de actividades antes de que se mostrara el diálogo, no se lo descartaba, lo que provoca una falla cuando el usuario descartaba diálogo errante manualmente. (I687e5)
  • Se corrigió un problema en el que la API de onNavDestinationSelected en NavigationUI mostraba true incluso si en realidad no querías mostrar navigate() en ese gráfico de navegación. Ahora usa la misma lógica que usa setupWithNavController de forma interna para seleccionar solo el MenuItem asociado con el destino actual mediante el hierarchy del destino. (I2b053)

Versión 2.4.0-beta01

27 de octubre de 2021

Se lanzó androidx.navigation:navigation-*:2.4.0-beta01. La versión 2.4.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • Ahora, puedes usar by navGraphViewModel con una ruta como alternativa a utilizar un ID para admitir mejor el uso del DSL de Kotlin de Navigation con fragmentos. (I901e3, b/201446416)

Cambios en la API

  • La API de visibleEntries ahora es experimental. (I93f6f)

Correcciones de errores

  • Los objetos ViewModel ya no se destruirán cuando se interrumpan las transiciones si navegas hacia atrás y hacia adelante entre las mismas pantallas (Id52d8, b/200817333)
  • Los argumentos NavDeepLink anulables ya no requieren un valor predeterminado cuando se agregan vínculos directos a NavDestination. (I5aad4, b/201320030)
  • Ahora, ya no se consideran iguales los objetos NavBackStackEntry con diferentes elementos Lifecycle. Es decir, NavHost volverá a componer, de manera correcta, todos los destinos cuando se utilice singleTop para navegar y cuando se vuelvan a seleccionar los elementos del menú inferior. (I1b351, b/196997433)
  • Se solucionó un problema con AbstractListDetailFragment que causaba que se ignoraran o se controlaran, de forma incorrecta, los atributos layout_width y layout_weight en el panel de lista que muestra onCreateListPaneView(). (f5fbf3)
  • Ahora, el estado visual de los destinos de diálogo se mantiene, de manera correcta, sincronizado con el estado de DialogFragmentNavigator. Es decir, ahora, cuando se llama, de forma manual, a la API asíncrona de dismiss() para DialogFragment, se borran, de manera correcta, todos los destinos de diálogo encima del diálogo que ahora se descarta. Esto no afecta los casos en los que usas popUpTo o popBackStack() para descartar el diálogo. (I77ba2)
  • Ahora, AbstractAppBarOnDestinationChangedListener tiene un mensaje de error más claro para onDestinationChanged(). (Ie742d)

Versión 2.4.0-alpha10

29 de septiembre de 2021

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

Nuevas funciones

  • NavController ahora ofrece la capacidad de recuperar una lista de todas las instancias NavBackStackEntry visibles a través del StateFlow de visibleEntries. (Ia964e)
  • Ahora, rememberNavController() toma un conjunto opcional de instancias de Navigator que se agregarán al NavController que se muestre para mejorar la compatibilidad con los elementos Navigator opcionales, como los de Accompanist Navigation Material (I4619e)

Correcciones de errores

  • Dynamic Navigation ya no fallará cuando se vuelva a crear la Activity. (Ifa6a3, b/197942869)
  • Se corrigió un problema con el botón Atrás del sistema que se producía solo después de que volvía a un destino que admite composición y que contiene un NavHost. (3ed148, b/195668143)
  • SafeArgs ahora genera los argumentos para fromBundle() y fromSavedStateHandle() en el orden apropiado del parámetro. (I824a8, b/200059831)

Versión 2.4.0-alpha09

15 de septiembre de 2021

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

Nuevas funciones

  • Ahora puedes usar el método clearBackStack() para borrar cualquier estado que se haya guardado con popBackStack() o popUpToSaveState. (I80a0f)
  • Ahora puedes pasar una lista de argumentos o vínculos directos a tu compilador del gráfico de navegación anidado, y se agregarán automáticamente al gráfico resultante. (I8a470, b/182545357)

Cambios en la API

  • La función DSL de Kotlin navArgument ahora es parte de navigation-common, en lugar de navigation-compose. Deberás actualizar las importaciones para seguir usando esta función. (I1d095)

Cambios en el comportamiento

  • Cuando se generan argumentos, Safe Args ahora coloca los parámetros sin valores predeterminados antes de los que sí tienen. (I89709, b/198493585)

Correcciones de errores

  • Cuando uses Navigation Compose, NavGraphs solo será DESTROYED una vez que todos sus elementos secundarios sean DESTROYED. (I86552, b/198741720)
  • Los argumentos NavDeepLink anulables ya no requieren un valor predeterminado. (Ia14ef, b/198689811)
  • Llamar a setGraph() con un gráfico nuevo ahora también borrará todas las pilas de actividades guardadas, además de su comportamiento previo de resaltar la pila de actividades. (I97f96)
  • Se corrigió un problema mediante el cual no se notificaban las instancias OnDestinationChangedListener y currentBackStackEntryFlow cuando se usaba launchSingleTop. (Iaaebc)

Actualizaciones de dependencias

Versión 2.4.0-alpha08

1 de septiembre de 2021

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

Nuevas funciones

  • Ahora es posible extender la clase NavType para crear objetos NavTypes personalizados. Los tipos personalizados solo se admiten cuando se compila el gráfico de navegación de manera programática, por ejemplo, a través del DSL de Kotlin de Navigation Graph. (I78440, b/196871885)

Cambios en el comportamiento

  • Cuando se generan acciones, el código de Kotlin que se crea desde Safe Args ahora coloca los argumentos sin valores predeterminados antes de aquellos que sí los tienen como parámetros. (Idb697, b/188855904)
  • Ahora, los vínculos directos verifican que todos los argumentos necesarios (los que no tienen valores predeterminados) estén presentes en Uri. (#204, b/185527157)

Correcciones de errores

  • El uso de getBackStackEntry y previousBackStackEntry dentro de composable(), junto con remember(), ya no causará una excepción cuando no haya ningún destino en la pila de actividades. (I75138, b/194313238)
  • Ahora, Navigation Compose se recompone, de manera correcta, cuando se cambian los argumentos de la pila de actividades y se usa launchSingleTop=true. (Iebd69, b/186392337)
  • Ya no habrá un objeto ArrayIndexOutOfBoundsException cuando se llame a setGraph con un gráfico de 13 o 29 destinos. (I1a9f1, b/195171984)
  • El generador Java de SafeArgs ya no debería mostrar advertencias de lint cuando se creen clases Args. (I1a666, b/185843837)

Contribución externa

  • Gracias a ospixd, se garantiza que los vínculos directos verifiquen que todos los argumentos necesarios (los que no tienen valores predeterminados) estén presentes en Uri. (#204, b/185527157)

Versión 2.4.0-alpha07

18 de agosto de 2021

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

Correcciones de errores

  • Ahora, Navigation Compose guarda el estado, de manera correcta, después de cambiar la configuración y cuando se cambian los gráficos mientras se usa la función de varias pilas de actividades. (If5a3d, b/195141957)
  • Cuando se vuelva a seleccionar la misma pestaña cuando se usa Navigation Compose con varias pilas de actividades, ya no se mostrará una pantalla en blanco. (I860dc, b/194925622)
  • Ahora, NavHost observa los cambios en Lifecycle.State de NavBackStackEntry lo que implica que el uso de NavHost en un fragmento ahora se recompondrá, de manera correcta, a medida que cambie el ciclo de vida en lugar de generar una pantalla en blanco. (I4eb85, b/195864489)
  • Se corrigió un problema por el que, cuando se descartaba un objeto DialogFragment, no se actualizaba de manera correcta el estado NavController después de volver a crear tu actividad (es decir, después de un cambio de configuración). (Icd72b)
  • Se corrigió un problema por el que, cuando se abría un destino de diálogo, no se actualizaba el control del botón Atrás del sistema de NavController, lo que podía hacer que NavController interceptara el botón Atrás aunque no tuviera ninguna pila de actividades para mostrar. (If3b34)
  • Ahora, Safe Args genera automáticamente un método toSavedStateHandle para los argumentos que se pueden usar a fin de probar tu código ViewModel. (If1e2d, b/193353880)

Versión 2.4.0-alpha06

4 de agosto de 2021

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

Cambios en la API

  • Se cambió el nombre de los métodos requireSlidingPaneLayout() y requireDetailPaneNavHostFragment() de AbstractListDetailFragment a getSlidingPaneLayout() y getDetailPaneNavHostFragment(), respectivamente. (I34a08)

Cambios en el comportamiento

  • Cuando navegues con animaciones (como Crossfade), el nuevo destino de Lifecycle solo alcanzará RESUMED una vez que se complete la animación. (If0543, b/172112072, b/194301889)
  • El elemento NavHost de Navigation Compose ahora establece el gráfico como parte de la primera composición. (Ieb7be)

Correcciones de errores

  • Cuando aparece el último destino de un gráfico de navegación, ya no se muestra ClassCastException. (If0543, b/172112072, b/194301889)
  • Se corrigió un NullPointerException que se producía cuando se agregaba un vínculo directo sin un Uri y se navegaba a través de una ruta o un vínculo directo. (938a0c, b/193805425)
  • Se corrigió un problema en Navigation Compose por el que NavBackStackEntry con vínculo directo no llegaba al estado RESUMED. (I192c5)
  • Se corrigió un problema por el que, cuando se abría un destino de diálogo, no se actualizaba el control del botón Atrás del sistema de NavController, lo que podía hacer que NavController interceptara el botón Atrás aunque no tuviera ninguna pila de actividades para mostrar. (aosp/1782668)

Versión 2.4.0-alpha05

21 de julio de 2021

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

Cambios en el comportamiento

  • El elemento NavHost de Navigation Compose ahora usa Crossfades cuando navegas por destinos. (I07049, b/172112072)
  • Ahora puedes realizar cambios en el gráfico de un NavHost. Los gráficos con el mismo startDestination y los mismos destinos se considerarán iguales y no se borrarán la pila de actividades NavController. (I0b8db, b/175392262)

Correcciones de errores

  • Se corrigió un error NoSuchElementException cuando se llama a popBackStack() desde un LifecycleObserver adjunto de NavBackStackEntry que lo producían las actualizaciones reentrantes en el estado del NavController. (I64621)
  • AbstractListDetailFragment ahora permite quitar SlidingPaneLayout por completo del APK cuando no se usa AbstractListDetailFragment. (I611ad)
  • NavGraph y NavDestination ahora anulan el método igual para que dos objetos con los mismos valores se consideren iguales. (I166eb, b/175392262)

Versión 2.4.0-alpha04

1 de julio de 2021

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

Nuevas funciones

  • El artefacto navigation-fragment ahora contiene una implementación compilada previamente de un diseño de dos paneles mediante el nuevo AbstractListDetailFragment. Este fragmento usa un SlidingPaneLayout para administrar un panel de lista (que proporciona la subclase) y un panel de detalles, que utiliza un NavHostFragment como su implementación, tal como se ve en nuestra implementación de ejemplo. (Iac4be, b/191276636)
  • El NavHost del artefacto navigation-compose ahora admite destinos de dialog además de los destinos composable. Cada uno de estos destinos de diálogo se mostrará en un Dialog componible y flotante sobre el destino composable actual. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

Cambios en la API

  • Se cambió el nombre de la función add en NavigatorState por push. Todas las llamadas actuales a add() deberán cambiarse a push(). (Ie89fc, b/172112072)
  • Las instancias de Navigator personalizadas ahora pueden usar las API de pushWithTransaction y popWithTransition en NavigatorState para enviar o abrir un destino de forma asíncrona. Ten en cuenta que ninguno de los navegadores incluidos usa estas API aún. (Ic4d7c, b/172112072)

Cambios en el comportamiento

  • NavDeepLinkBuilder ahora agrega PendingIntent.FLAG_IMMUTABLE al PendingIntent que muestra createPendingIntent(), lo que garantiza que esta API funcione como se espera cuando se orienta a Android 12. (If8c52)

Correcciones de errores

  • Se corrigió un problema de <include-dynamic> por el que los argumentos pasados al gráfico no se pasaban de forma correcta a aquel incluido de forma dinámica. (I3e115)
  • Se corrigió una NullPointerException cuando navegas a un destino usando un argumento string[] con un valor predeterminado de @null. (I1fbe8)
  • Se agregaron reglas de ProGuard para @Navigator.Name, que solucionó los problemas cuando se usa el modo completo de R8 3.1. (I2add9, b/191654433)
  • SafeArgs ya no fallará cuando se compile tu app con versiones de Kotlin anteriores a 1.5.0. (Icd1ff, b/190739257)

Versión 2.4.0-alpha03

16 de junio de 2021

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

Correcciones de errores

  • Se corrigió un problema por el que se necesitaban dos llamadas a navigate() para navegar a un gráfico dinámico incluido. (I7785c, b/188859835)
  • Se corrigió una regresión que se había introducido en Navigation 2.4.0-alpha01, en la que setupActionBarWithNavController() no quitaba correctamente el ícono Arriba cuando estabas en un destino de nivel superior. (I5d443, b/189868637)
  • Se corrigió un IllegalStateException cuando se llamaba a popBackStack() después de que se mostraba el gráfico raíz de NavController. (I2a330, b/190265699)
  • Ahora, las reglas ProGuard para by navArgs() se aplican correctamente cuando se usa navigation-common o cualquier artefacto que dependa de él. (I68800, b/190082521)
  • Un OnDestinationChangedListener que llama a navigate() la primera vez que recibe una devolución de llamada ahora obtiene correctamente una segunda devolución de llamada con el destino al que navegó. (Ie5f9e, b/190228815)
  • Safe Args ya no falla cuando se usa con módulos de funciones dinámicas y AGP 7.0+. (I69518, b/189966576)

Problema conocido

  • Safe Args falla con un error Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ cuando se usa Gradle 6.7.0 debido a una dependencia en una versión anterior de Kotlin. Para resolver el problema, actualiza a Gradle 7.0. (b/190739257)

Versión 2.4.0-alpha02

2 de junio de 2021

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

Nuevas funciones

  • Ahora, las rutas son compatibles con los destinos de Activity, Fragment y Dialog, así como también con todo el DSL de Kotlin para DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • El método NavigationUI agregó, de manera temporal, API experimentales para permitir que se inhabilite guardar tu estado. Si bien siempre guardar el estado es el comportamiento correcto, todavía se usan las bibliotecas obsoletas (es decir, fragmentos retenidos) de maneras que no se pueden admitir cuando se guarda el estado, lo que les ofrece a las apps una oportunidad para dejar de utilizar, de forma gradual, las API no admitidas. (Idf93c)
  • Navigation ahora brinda las API de findDestination() y getHierarchy() que se pueden usar para implementar un método NavigationUI personalizado. findDestination() es una función de extensión en NavGraph que ubicará un destino dentro del gráfico. getHierarchy() es una función en NavDestination que se puede usar para verificar si un destino determinado está dentro de la jerarquía de otro. (I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Se actualizaron los métodos NavigationUI que tomaban un elemento BottomNavigationView para que, en su lugar, tomen NavigationBarView, la superclase que se introdujo en Material 1.4.0. De esta manera, se permite usar estos métodos con NavigationRailView. (Ib0b36, b/182938895)

  • Cuando se aumenta un elemento <action> mediante XML, los atributos de animación pueden usar atributos que se extraen de tu tema por medio de la sintaxis app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Cambios en la API

  • Los compiladores de DSL de Kotlin que usan un ID dejaron de estar disponibles. Debe reemplazarse por compiladores que usan rutas. (I85b42, b/188816479) (I9f58f, b/188816479).

Correcciones de errores

  • DialogFragmentNavigator ahora usa la API de NavigatorState.pop() para informarle a NavController los casos en los que se descarta un diálogo cuando se presiona el botón Atrás del sistema o se hace clic fuera de él, lo que garantiza que el estado NavController siempre se sincronice con el estado de Navigator. (I2ead9)
  • Navigation ya no brinda ConcurrentModificationException cuando se usa la manipulación de la lista de OnDestinationChangedListeners desde una devolución de llamada onDestinationChanged. (Ib1707, b/188860458)

  • Safe Args ya no falla cuando se intentan generar propiedades de dirección en Kotlin. (Id2416, b/188564435)

  • Ahora, el método setId en NavDestination se anota, de manera correcta, con @IdRes, por lo que solo acepta ID de recurso. (I69b80)

  • Ahora, el parámetro int de findNode es resId en lugar de resid. (I7711d)

Actualización de dependencia

  • Safe-Args ahora depende del complemento de Android para Gradle 4.2.0. Es decir, ya no deberías recibir una advertencia cuando uses applicationIdTextResource. (I6d67b, b/172824579)

Versión 2.4.0-alpha01

18 de mayo de 2021

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

Nuevas funciones

  • El método currentBackStackEntryAsFlow() en NavController proporciona un Flow que se emite cada vez que cambia el NavBackStackEntry actual. Este flujo se puede usar como alternativa a la administración manual de un OnDestinationChangedListener. (I19c4a, #89, b/163947280)

Varias pilas de actividades

NavController es responsable de administrar la pila de actividades de los destinos, de agregar destinos a la pila de actividades cuando navigate() hacia ellos y de quitarlos cuando llamas a popBackStack() o activas el botón Atrás del sistema. Se expandió la clase NavOptions existente y la integración en entradas <action> del archivo XML del gráfico de navegación para poder guardar y restablecer la pila de actividades. (b/80029773)

Como parte de este cambio, los métodos NavigationUI de onNavDestinationSelected(), BottomNavigationView.setupWithNavController() y NavigationView.setupWithNavController() ahora guardan y restablecen automáticamente el estado de los destinos agregados, lo que permite admitir varias pilas de actividades sin ningún cambio en el código. Cuando se usa Navigation con Fragments, esta es la forma recomendada de integración con varias pilas de actividades. (Ie07ca)

Las API subyacentes para guardar y restablecer el estado se exponen a través de varias superficies:

  • En el archivo XML de Navigation, el elemento <action> ahora puede usar los atributos booleanos de app:popUpToSaveState y app:restoreState para guardar el estado de los destinos que se agregaron mediante app:popUpTo y restaurar el estado asociado al destino que se pasa como app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • En el DSL de Kotlin navOptions, puedes agregar la propiedad booleana restoreState y la propiedad booleana saveState en el compilador popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • En la compilación manual de un objeto NavOptions mediante NavOptions.Builder, puedes usar el setRestoreState() y la sobrecarga nueva en setPopUpTo() que toma un parámetro saveState adicional.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Las llamadas programáticas a popBackStack() ahora pueden incluir un parámetro saveState adicional.

En todos los casos, NavController guardará y restablecerá el estado de cada NavBackStackEntry, incluidas todas las instancias de ViewModel con alcance de destino de navegación. Se actualizaron las API de Navigator para que cada Navigator permita guardar y restablecer su propio estado.

Se actualizaron los elementos ComposeNavigator que se usan para los destinos composable en Navigation Compose y los elementos FragmentNavigator y DynamicFragmentNavigator para los destinos <fragment> en Navigation con Fragments a fin de usar las nuevas API de Navigator y lograr que se puedan guardar y restablecer los estados.

Rutas de Navigation

Una ruta es una String que identifica de forma exclusiva un destino. Si bien antes solo se usaba en Navigation Compose, este concepto ahora se convirtió en una parte de las API de Navigation principales. Esto proporciona una alternativa al uso de ID enteros cuando construyes tu gráfico a través del DSL de Kotlin de Navigation. (b/172823546)

Todas las API que antes solo tomaban un ID tienen una sobrecarga que toma una ruta String. Esto incluye navigate(), popBackStack(), popUpTo() y getBackStackEntry().

Esto tuvo algunas consecuencias en las API:

  • Se dio de baja a la propiedad popUpTo en el DSL de Kotlin y se la reemplazó por popUpToId. (I59c73, b/172823546)
  • Se dio de baja la API de getStartDestination() y se la reemplazó por getStartDestinationId(). (I0887f, b/172823546)

Para los desarrolladores que actualicen versiones anteriores de Navigation Compose a Navigation Compose 2.4.0-alpha01, esto significa que las siguientes importaciones en los métodos de extensión ya no son necesarias y se deben quitar:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

Se reemplazó el argumento KEY_ROUTE por la propiedad route en NavDestination, lo que te permite llamar a navBackStackEntry.destination.route directamente.

Cambios en la API

  • Todos los artefactos de Navigation se reescribieron en Kotlin. Esto mejoró la nulabilidad de las clases que usan elementos genéricos (como las subclases de NavType). Todas las funciones de extensión de Kotlin que solían formar parte de los artefactos -ktx se movieron a sus respectivos artefactos principales. Los artefactos -ktx seguirán publicándose, pero estarán completamente vacíos. (b/184292145)
  • NavDeepLinkBuilder ahora admite la adición de varios destinos distintos a la pila de actividades generada. (I3ee0d, b/147913689)
  • Se agregaron funciones de fábrica para DynamicNavHostFragment (Icd515, b/175222619)
  • El ID único de un elemento NavBackStackEntry ahora se expone como parte de su API pública. (Ie033a)
  • Los campos name y argument, y las funciones de desestructuración de NamedNavArgument ahora son públicas. (#174, b/181320559)
  • Se agregó una nueva extensión NavBackStackEntry#provideToCompositionLocals que proporciona la NavBackStackEntry a las configuraciones locales de composición. (#175, b/187229439)

Safe Args

  • Safe Args ahora genera un método fromSavedStateHandle() para cada clase NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Se actualizó Safe Args para que dependa de KotlinPoet 1.8.0. (#172, b/183990444)

Cambios en el comportamiento

  • Navigation actualmente depende de Lifecycle2.3.1 y ahora marca a setGraph(), popBackStack(), navigateUp() y navigate(), los métodos que actualizan el NavBackStackEntry Lifecycle, como@MainThread, lo que alinea a Navigation con la aplicación de subprocesos principal que se introdujo en Lifecycle 2.3.0. (b/171125856)
  • El análisis de argumentos de enumeración de vínculos directos ahora no distingue entre mayúsculas y minúsculas, lo que permite que un vínculo directo como http://www.example.com/red coincida con un vínculo directo www.example.com/{color}, incluso cuando la enumeración tiene el valor RED (#152, b/135857840)

Compatibilidad con Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 solo es compatible con la versión Compose 1.0.0-beta07 y versiones posteriores.

Correcciones de errores

  • Se corrigió un problema en el que los marcadores de posición de argumento final tenían prioridad sobre los vínculos directos con un sufijo con coincidencia exacta. (#153, b/184072811)
  • NavHostFragment ahora admite navegadores personalizados que usan el mismo @Navigator.Name("dialog") que el DialogFragmentNavigator predeterminado. (Ib1c2c, b/175979140)
  • Se mejoró el comportamiento de NavigatorProvider#addNavigator para garantizar que no se generen problemas al llamarlo varias veces con la misma instancia. (#176, b/187443146)

Contribuciones externas

  • Gracias a simonschiller, se compiló compatibilidad con Safe Args y se generó un método fromSavedStateHandle() para cada clase NavArgs. (#122, b/136967621)
  • Gracias a Bradleycorn, se crearon análisis de argumentos de enumeración de los vínculos directos que no distinguen entre mayúsculas y minúsculas. (#152, b/135857840)
  • Gracias a osipxd, se solucionó un problema en el que los marcadores de posición de argumento final tenían prioridad sobre los vínculos directos con un sufijo con coincidencia exacta. (#153, b/184072811)
  • Gracias a tatocaster, se actualizó Safe Args para que dependa de KotlinPoet 1.8.0. (#172, b/183990444)
  • Gracias a jossiwolf, se crearon los campos name y argument, y se desestructuraron funciones de NamedNavArgument públicas. (#174, b/181320559)
  • Gracias a joyswolf, se introdujo una nueva extensión NavBackStackEntry#provideToCompositionLocals que proporciona la NavBackStackEntry a las configuraciones locales de composición. (#175, b/187229439)
  • Gracias a jossiwolf, se mejoró el comportamiento de NavigatorProvider#addNavigator para garantizar que no se generen problemas al llamarlo varias veces con la misma instancia. (#176, b/187443146)

Versión 1.0.0-alpha10

7 de abril de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • Ahora NavHost acepta un Modifier, que se transmite al contenedor componible que une el destino componible. (I85aca, b/175125483)

Correcciones de errores

  • Ahora NavHost funciona incluso cuando no se encuentra un OnBackPressedDispatcherOwner, por ejemplo, cuando se obtiene una vista previa de NavHost. (I7d8b4)
  • Navigation Compose ahora depende de Navigation 2.3.5 y soluciona un problema cuando se usa BackHandler dentro de un destino de NavHost. (I7e63b, b/182284739)

Versión 1.0.0-alpha09

10 de marzo de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • LocalViewModelStoreOwner.current ahora muestra un objeto ViewModelStoreOwner anulable para determinar mejor si un ViewModelStoreOwner está disponible en la composición actual. Las API que requieren un ViewModelStoreOwner, como viewModel() y NavHost, aún generan una excepción si no se establece un ViewModelStoreOwner. (Idf39a)

Correcciones de errores

  • Ahora, Navigation Compose depende de Navigation 2.3.4, que incluye la solución para intentar configurar el mismo objeto ViewModelStore después de que se configurara el gráfico. (I65c24, b/177825470)

Versión 1.0.0-alpha08

24 de febrero de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Nuevas funciones

  • NavHost ahora propaga la LocalSavedStateRegistryOwner de CompositionLocal con los NavBackStackEntry de destino, lo que garantiza que cualquier estado que se guarde directamente en los SavedStateRegistry se guarde y se restablezca junto al destino. (I435d7, b/179469431)

Versión 1.0.0-alpha07

10 de febrero de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.

Actualizaciones de dependencias

Versión 1.0.0-alpha06

28 de enero de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Se agregó un método de extensión getBackStackEntry(route: String) en NavController que muestra el NavBackStackEntry asociado. (If8931)

Versión 1.0.0-alpha05

13 de enero de 2021

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.

Se actualizó para depender de Compose 1.0.0-alpha10.

Versión 1.0.0-alpha04

16 de diciembre de 2020

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

  • Se actualizó la compatibilidad con Compose 1.0.0-alpha09.

Versión 1.0.0-alpha03

2 de diciembre de 2020

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema en el que popBackStack() y navigateUp() no funcionaban luego de un cambio en la configuración o en el cierre o la recreación del proceso. (Icea47, b/173281473)
  • Ahora puedes navegar a un gráfico anidado dentro de NavHost, ya que funciona correctamente. (I0948d, b/173647694)

Versión 1.0.0-alpha02

11 de noviembre de 2020

Lanzamiento de androidx.navigation:navigation-compose:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Navigation Compose ahora admite NavOptions para usar operaciones popUpTo y launchSingleTop. (If96c3, b/171468994)
  • Se agregó una función de navegación que toma una ruta en lugar de un ID que te permite construir gráficos anidados en el DSL de Navigation Compose. (I1661d)
  • startDestination ahora aparece antes de la ruta en la lista de parámetros para un NavHost. (Ie620e)
  • Ahora puedes crear un gráfico con la ruta como destino inicial fuera de un elemento NavHost que admite composición. (Iceb75)

Versión 1.0.0-alpha01

28 de octubre de 2020

Lanzamiento de android.navigation:navigation-compose:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

El artefacto navigation-compose proporciona integración entre el componente Navigation y Jetpack Compose. Usa funciones @Composable como los destinos en tu aplicación.

En esta versión inicial, se proporciona lo siguiente:

  • Un NavHost componible que te permite crear un gráfico de navegación mediante un DSL de Kotlin
  • Alcance del ciclo de vida, ViewModel, y el estado recordado a nivel del destino
  • Integración automática con el botón Atrás del sistema
  • Compatibilidad para pasar argumentos, adjuntar vínculos directos a los destinos y retroceder un resultado a destinos anteriores
  • Ayudantes específicos de Compose en rememberNavController() y currentBackStackEntryAsState() para permitir elevar el estado y conectar el objeto NavController con elementos que admiten composición fuera de NavHost (como una barra de navegación inferior)

Consulta la guía de navegación con Compose para obtener más información.

Versión 2.3.5

Versión 2.3.5

7 de abril de 2021

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

Nuevas funciones

  • Al navegar usando un NavDeepLinkRequest o Uri, ahora puedes acceder a Uri, acción y tipo de MIME en el destino resultante mediante la obtención del intent de los argumentos a través de KEY_DEEP_LINK_INTENT, es decir, la duplicación de la funcionalidad que ya está disponible para vínculos directos externos. (I975c3, b/181521877)

Correcciones de errores

  • Se agregó OnBackPressedCallbacks a un despachador con el NavBackStackEntry ya que ahora el LifecycleOwner intercepta correctamente después de que el ciclo de vida de la actividad sea STOPPED y, luego, STARTED (Iff94f, (b/182284739)
  • El análisis de dominio de vínculo directo ahora distingue entre mayúsculas y minúsculas, lo que garantiza que www.example.com coincida con www.example.com y www.Example.com. Ten en cuenta que los nombres de los parámetros de consulta aún distinguen entre mayúsculas y minúsculas. (#144, b/153829033)
  • Se corrigió un NullPointerException que podría ocurrir cuando un destino tiene varios argumentos de configuración predeterminada que no admiten valores nulos y navega a ese destino mientras anula solo un subconjunto de esos argumentos. (aosp/1644827)

Actualizaciones de dependencias

  • El complemento de Navigation Safe Args Gradle ahora depende del complemento de Gradle para Kotlin 1.4.31. (aosp/1661058, b/181156413)

Contribución externa

  • Gracias, bentrengrove, por la solicitud de extracción que hace que el análisis del dominio del vínculo directo distinga entre mayúsculas y minúsculas. (#144, b/153829033)

Versión 2.3.4

Versión 2.3.4

10 de marzo de 2021

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

Nuevas funciones

  • Ahora los argumentos de ReferenceType se pueden analizar correctamente cuando se envían como parte de un URI de vínculo directo. Esto admite tanto el valor de número entero sin procesar como los valores hexadecimales con el prefijo 0x. (#127, b/179166693)
  • El android:defaultValue para un argumento con app:argType="float" ahora admite valores predeterminados de número entero, lo que te permite usar android:defaultValue="0"en lugar de usar 0.0 (#117, b/173766247)

Correcciones de errores

  • Corrige el progreso de instalación atascada cuando se usa la compatibilidad de Navigation para funciones dinámicas. (Ib27a7, b/169636207)
  • Llamar a setViewModelStore o setLifecycleOwner con el mismo objeto que ya se estableció ahora será una no-op. (Idf491, b/177825470)
  • Safe Args ahora agrega anotaciones de eliminación en los métodos adecuados cuando se usa Java. (I8fbc5, b/179463137)

Contribuciones externas

  • Gracias JvmName por la solicitud de extracción para garantizar que los argumentos de ReferenceType ahora se puedan analizar correctamente cuando se envían como parte de un URI de vínculo directo. (#127, b/179166693)
  • Gracias a tatocaster por la solicitud de extracción para permitir que el defaultValue de un argumento con app:argType=”float” ahora admita valores predeterminados de número entero. (#117, b/173766247)

Versión 2.3.3

Versión 2.3.3

27 de enero de 2021

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

Correcciones de errores

  • Ya no se produce una falla cuando se muestra una NavBackStackEntry antes de que Lifecycle se mueva a CREATED. (Ie3ba3)
  • Se corrigió la regresión que se producía por b/171364502 en la que la navegación hacia una actividad con un valor del recurso de animación de 0 ocasionaba una ResourceNotFoundException. (I7aedb, b/176819931)

Versión 2.3.2

Versión 2.3.2

2 de diciembre de 2020

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

Correcciones de errores

  • Se corrigió una regresión en NavigationUI donde el uso de un destino <activity> con onNavDestinationSelected no podía navegar por la actividad. (I22e34, b/171364502)
  • Se solucionó un problema por el cual navigation-dynamic-features-fragment provocaba que se navegara al destino recién instalado varias veces. (aosp/1486056, b/169636207)
  • Se solucionó un problema por el que no se enviaban los argumentos predeterminados a las instancias OnDestinationChangedListener cuando se usaba launchSingleTop. (I2c5cb)
  • Se solucionó un problema por el que la navegación hacia un gráfico de navegación anidado no creaba una nueva instancia de gráfico en la pila de actividades. (Ifc831)
  • Se solucionó un problema por el que el uso de navigate() con un popUpTo que quitaba el último destino en un gráfico de navegación no se destruiría y se quitaba inmediatamente el gráfico de navegación de la pila de actividades. (I910a3)
  • SafeArgs de Navigation ahora usa KotlinPoet versión 1.7.2, lo que agrega compatibilidad con el modo explícito de la API de Kotlin. (I918b5)
  • Ahora NavHostFragment.findNavController(Fragment) también comprueba la vista de decoración de raíz de un DialogFragment, además de las comprobaciones existentes de la jerarquía de Fragment y la jerarquía de vistas de Fragment. Esto te permite probar fragmentos de diálogo que usan Navigation con FragmentScenario y Navigation.setViewNavController(). (I69e0d)

Versión 2.3.1

Versión 2.3.1

14 de octubre de 2020

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

Nuevas funciones

  • Se agregaron a la IU de Navigation recursos predeterminados de Animator, los cuales se recomiendan antes que los recursos de animación predeterminados. (b/167430145)
  • NavOptions ahora anula el código hash e iguala los métodos. (b/161586466)
  • Navigation ahora incluye el destino actual en la excepción "Sin destino con ID" de IllegalArgumentException, lo que debería mejorar la experiencia de depuración del desarrollador. (b/168311416)

Correcciones de errores

  • Safe Args ya no ajustará la línea del resultado, incluso si el nombre de la clase del argumento generado tiene más de 100 caracteres. (b/168584987)

Cambios de dependencia

  • navigation-ui ahora depende de DrawerLayout 1.1.1, lo que garantiza que NavigationUI pueda abrir el panel lateral incluso cuando se usan LOCK_MODE_LOCKED_CLOSED o LOCK_MODE_LOCKED_OPEN. (b/162253907)
  • Safe Args ahora depende de KotlinPoet 1.6.0. (aosp/1435911)
  • Safe Args ahora depende de AGP 4.0.1. (aosp/1442337)

Versión 2.3.0

Versión 2.3.0

24 de junio de 2020

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

Cambios importantes desde la versión 2.2.0

  • Integración del módulo de funciones: los artefactos navigation-dynamic-features-runtime y navigation-dynamic-features-fragment te permiten navegar a los destinos definidos en módulos de funciones y controlan automáticamente la instalación de esos módulos según sea necesario. Consulta Cómo navegar con módulos de funciones para obtener más información.
  • Prueba de navegación: El artefacto navigation-testing proporciona un objeto TestNavHostController que te permite establecer el destino actual y verificar la pila de actividades después de las operaciones de navegación. Consulta Navegación de prueba para obtener más información.
  • Muestra de un resultado: el objeto NavBackStackEntry asociado con cada destino en la pila de actividades de Navigation ahora te permite acceder a un elemento SavedStateHandle apto para el almacenamiento de cantidades pequeñas de estado guardado que se deberían asociar con una entrada de pila de actividades específica. Consulta Cómo mostrar un resultado al destino anterior para obtener más información.
  • Compatibilidad con NavigationUI para Openable: Se reemplazaron todos los usos de DrawerLayout en NavigationUI con la interfaz Openable más genérica, que se agregó en CustomView 1.1.0 y que DrawerLayout implementó en DrawerLayout 1.1.0.
  • Compatibilidad con acciones y tipos de MIME en vínculos directos: Los vínculos directos se expandieron para admitir app:action y app:mimeType, además del elemento app:uri disponible anteriormente. NavController ahora admite la navegación mediante cualquier combinación de estos campos a través de la nueva clase de NavDeepLinkRequest. Consulta Cómo navegar con NavDeepLinkRequest para obtener más información.

Errores conocidos

  • La compatibilidad con las acciones de vínculos directos y los tipos de MIME aún no está disponible en Manifest Merger. Hasta que se complete ese trabajo, los elementos <intent-filter> generados del elemento <nav-graph> en tu manifiesto no incluirán tu tipo de MIME en su elemento <data> ni en tu <action> personalizada. Debes agregar manualmente un <intent-filter> apto a tu manifiesto.

Versión 2.3.0-rc01

10 de junio de 2020

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

Correcciones de errores

  • Se corrigió una NullPointerException cuando se reemplazó una instancia de un destino sin argumentos por otra con argumentos con singleTop. (b/158006669)
  • Todas las excepciones destination is unknown que arrojad NavController ahora tienen información de depuración adicional para ayudar a determinar el estado de NavController. (b/157764916)

Versión 2.3.0-beta01

20 de mayo de 2020

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

Correcciones de errores

  • Se corrigió un problema por el que el objeto Lifecycle del elemento NavBackStackEntry no se actualizaba correctamente después del cierre del proceso. (b/155218371)
  • Las instancias OnDestinationChangedListener registradas antes de llamar al objeto setGraph() ahora se envían correctamente al destino restablecido después del cierre del proceso. (b/155218371)
  • Cuando usas el objeto singleTop, ahora se actualizan correctamente los argumentos del elemento NavBackStackEntry, y los argumentos actualizados se envían a todas las instancias OnDestinationChangeListener. (b/156545508)

Actualizaciones de dependencias

Versión 2.3.0-alpha06

29 de abril de 2020

Lanzamiento de androidx.navigation:navigation-*:2.3.0-alpha06. (La versión 2.3.0-alpha06 contiene estas confirmaciones).

Nuevas funciones

  • Los vínculos directos se expandieron para admitir app:action y app:mimeType, además del elemento app:uri disponible anteriormente. NavController ahora admite la navegación mediante cualquier combinación de estos campos a través de la nueva clase de NavDeepLinkRequest. (b/136573074, b/135334841)

Cambios en la API

  • Se expandió considerablemente la compatibilidad con DSL de Kotlin para los destinos de Dynamic Navigation. (b/148969800)

Correcciones de errores

  • Se solucionó un error en el que se ignoraban los intents de vínculos directos al usar un destino de inicio anidado. (b/154532067).

Versión 2.3.0-alpha05

15 de abril de 2020

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

Nuevas funciones

  • Para las inclusiones de gráficos dinámicos con <include-dynamic>, ya no necesitas especificar app:graphPackage y se utilizará una configuración predeterminada en la que se agrega el sufijo moduleName a applicationId después de un punto. Si necesitas personalizar tu graphPackage, ahora se admite un marcador de posición ${applicationId}. (b/152696768)
  • El DSL de Kotlin de Navigation Graph ahora expone un defaultArguments Map para las acciones y duplica la capacidad de establecer valores predeterminados en elementos <action> en los archivos en formato XML de Navigation (b/150345605)

Correcciones de errores

  • A partir de Navigation 2.2.2: Se corrigió un IllegalStateException que se genera si usas un vínculo directo al destino de inicio de tu gráfico cuando tienes varias instancias de NavHostFragment en tu Activity (b/147378752)

Actualizaciones de dependencias

Versión 2.3.0-alpha04

18 de marzo de 2020

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

Nuevas funciones

  • Se agregó compatibilidad con la actividad del módulo de funciones y los destinos de fragmentos en el DSL de Kotlin de Navigation. (b/148969800)

Cambios en la API

  • La clase DynamicExtras ya no usa un patrón de compilador y ahora se puede construir directamente. (aosp/1253671)
  • DynamicActivityNavigator ahora toma un Context en su constructor en lugar de una Activity. (aosp/1250252)

Correcciones de errores

  • NavigationUI ya no ignora las etiquetas vacías (es decir, un destino con android:label=””) y ahora define correctamente el título en una string vacía. (b/148679860)

Actualizaciones de dependencias

  • Los artefactos de Navigation Dynamic Features ahora dependen de Play Core 1.6.5. (b/149556401)

Versión 2.3.0-alpha03

4 de marzo de 2020

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

Cambios en la API

  • En lugar de basarse en la clase DrawerLayout concreta, AppBarConfiguration ahora usa la interfaz Openable que se introdujo en CustomView 1.1.0-alpha02 (que DrawerLayout implementa a partir de DrawerLayout 1.1.0-alpha04), lo que te permite usar implementaciones personalizadas de Openable con NavigationUI. (b/129030452)

Correcciones de errores

  • Las reglas de ProGuard de navigation-common-ktx ahora solo mantienen correctamente las clases de NavArgs que se utilizan en lugar de todas las instancias de NavArgs. (b/150213558)

Cambios de dependencia

  • Navigation revirtió su dependencia de Core 1.2.0 y ahora depende de Core 1.1.0 para evitar que los desarrolladores tengan que trasladarse a una dependencia más nueva cuando Navigation no depende de API nuevas en Core 1.2.0.

Versión 2.3.0-alpha02

19 de febrero de 2020

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

Nuevas funciones

  • NavBackStackEntry ahora te permite acceder a un SavedStateHandle apto para el almacenamiento de cantidades pequeñas de estado guardado que se deberían asociar con una entrada de pila de actividades específica. Consulta Cómo mostrar un resultado para ver un ejemplo de caso práctico. (b/79672220)

Cambios en la API

  • Se agregaron métodos de conveniencia de getCurrentBackStackEntry() y getPreviousBackStackEntry() a fin de facilitar la recuperación de una NavBackStackEntry para los destinos actuales y anteriores. (b/79672220)

Correcciones de errores

  • navigateUp() ahora pasa KEY_DEEP_LINK_INTENT y los argumentos del destino actual al destino anterior cuando inicias la app en tu propia pila de tareas. (b/147456890)

Cambios de dependencia

Versión 2.3.0-alpha01

5 de febrero de 2020

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

Nuevas funciones

  • El artefacto navigation-testing nuevo proporciona una clase TestNavHostController. Esta clase ofrece una alternativa al uso de un NavController ficticio durante pruebas de Navigation que te permite definir el destino actual y verificar la pila de actividades después de operaciones de navegación. (b/140884273)
  • El nuevo navigation-dynamic-features-fragment (y su dependencia transitiva, navigation-dynamic-features-runtime) te permite incluir destinos o gráficos de navegación enteros (mediante <include-dynamic>) desde módulos de funciones, lo que proporciona una instalación optimizada de módulos de funciones cuando navegas a esos destinos. Consulta Cómo navegar con módulos de funciones para obtener más información. (b/132170186)

Correcciones de errores

  • A partir de Navigation 2.2.1: los vínculos directos sin parámetros de consulta ahora ignoran correctamente todos los parámetros de consulta en lugar de anexarlos a elementos {argument} finales o no hacen coincidir el vínculo directo (b/147447512).
  • A partir de Navigation 2.2.1: se actualizaron las reglas de ProGuard de navigation-ui para DrawerArrowDrawable a fin de garantizar que no se requiera android.enableJetifier=true. (b/147610424)
  • A partir de Navigation 2.2.1: El módulo navigation-common-ktx ahora tiene un nombre de paquete de manifiesto único en lugar de compartir el mismo nombre de paquete de manifiesto que navigation-runtime-ktx (aosp/1141947)

Actualizaciones de dependencias

Versión 2.2.2

Versión 2.2.2

15 de abril de 2020

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

Correcciones de errores

  • Se corrigió una IllegalStateException con vínculo directo al destino de inicio de tu gráfico cuando tienes varias instancias de NavHostFragment en tu Activity. (b/147378752)
  • NavigationUI ya no ignora las etiquetas vacías (es decir, un destino con android:label=””) y ahora define correctamente el título en una string vacía. Se lanzó anteriormente en Navigation 2.3.0-alpha04. (b/148679860)
  • Las reglas de ProGuard de navigation-common-ktx ahora solo mantienen correctamente las clases de NavArgs que se utilizan en lugar de todas las instancias de NavArgs. Se lanzó anteriormente en Navigation 2.3.0-alpha03. (b/150213558

Actualizaciones de dependencias

Versión 2.2.1

Versión 2.2.1

5 de febrero de 2020

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

Correcciones de errores

  • Los vínculos directos sin parámetros de búsqueda ahora ignoran correctamente todos los parámetros de búsqueda en lugar de anexarlos a elementos {argument} finales o no hacen coincidir el vínculo directo. (b/147447512).
  • Se actualizaron las reglas de ProGuard de navigation-ui para DrawerArrowDrawable a fin de garantizar que no se requiera android.enableJetifier=true. (b/147610424)
  • El módulo navigation-common-ktx ahora tiene un nombre de paquete de manifiesto único en lugar de compartir el mismo nombre de paquete de manifiesto que navigation-runtime-ktx. (aosp/1141947)

Actualizaciones de dependencias

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 controlado por Navigation, ViewModelStoreOwner (el mismo que se muestra para NavController.getViewModelStoreOwner()) y SavedStateRegistryOwner, además de proporcionar 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 consulta para vínculos directos: Los vínculos directos que tienen parámetros de consulta 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 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 vínculo.

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 elemento LifecycleOwner controlado por Navigation, ViewModelStoreOwner (el mismo que se muestra para NavController.getViewModelStoreOwner()) y SavedStateRegistryOwner, además de proporcionar 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 una 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 vínculo.

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 vínculo.

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 delegado de propiedad by navGraphViewModels() para usuarios de Kotlin mediante bibliotecas de -ktx o la API de getViewModelStoreOwner() agregada a NavController. Para obtener más información, consulta Cómo compartir datos relacionados con la IU entre destinos.
  • Destinos de diálogo: ahora puedes crear destinos de <dialog> que mostrarán un objeto DialogFragment cuando ejecutes navigate hacia 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 ejecutar navigate mediante un objeto Uri, que usa el elemento <deepLink> agregado 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 vínculo.

Cambios en la API

  • Se quitó la API getViewModelStore() obsoleta 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 vínculo.

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 vínculo.

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 vínculo.

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 vínculo.

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() por el método setOnBackPressedDispatcher() de NavHostController 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 controlados 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 vínculo.

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 vínculo.

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

  • 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 vínculo.

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 de Navigation.createNavigateOnClickListener(NavDirections) como alternativa a la creación de un objeto de escucha de clics con un ID de recurso y un paquete. b/127631752
  • Se dio de baja FragmentNavigator.instantiateFragment. La implementación predeterminada ahora usa FragmentFactory para crear instancias de fragmentos. b/119054429

Correcciones de errores

  • Navigation ya no envía un elemento Bundle nulo cuando hay argumentos adjuntos a un destino, lo que corrige el error cuando se usa android:defaultValue="@null" b/128531879.
  • Safe Args ahora depende de KotlinPoet 1.1.0, lo que soluciona el error con los nombres de paquetes muy 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 de 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 migrarse 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. Todo desarrollo posterior a 1.0 se basará en AndroidX y se compilará 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 error 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 gestionar un vínculo directo sin FLAG_ACTIVITY_NEW_TASK. b/126082008
  • Se corrigió un error en el que ActivityNavigator.applyPopAnimationsToPendingTransition no aplicaba la animación emergente de salida 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 1.0.0 de Navigation. Esta versión contiene una corrección de error.

Correcciones de errores

  • Se corrigió un error 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 los argumentos reference. b/124248602

Cambios en el comportamiento

  • Las coincidencias exactas de vínculos directos ahora tienen prioridad sobre los vínculos directos con coincidencias de argumentos o .*. b/123969518

Correcciones de errores

  • popBackStack() y navigateUp ahora muestran correctamente false cuando muestran 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 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 restablece un argumento Parcelable[] desde el estado de instancia guardado. b/123963545
  • Safe Args ahora borra correctamente las clases de Kotlin generadas de manera 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 crítico. Esta versión contiene algunas correcciones de errores y cambios de comportamiento.

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 con una referencia app:argType="reference" pueden tener un valor predeterminado que apunte 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 Gradle para Android 3.3.0. aosp/888413
  • Safe Args ahora depende de Kotlin 1.3.20. aosp/888414

Correcciones de errores

  • Safe Args ahora se puede usar 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 de un solo destino a la vez. b/123552990
  • Se solucionó un error en el que el estado FragmentNavigator se desincronizaba con el estado de NavController, lo que provocaba una IllegalStateException cuando se intentaba restablecer la pila de actividades. b/123803044
  • Se solucionó un error en el que la flecha hacia atrás procesada por NavigationUI no aparecía cuando se usaba ProGuard con ofuscación. b/123449431
  • El código generado por Safe Args ahora se procesa correctamente mediante un app:argType que apunta hacia a una clase interna estática en el formato .OuterClass$InnerClass. b/123736741
  • El código Java generado por Safe Args ahora procesa correctamente las acciones globales y los destinos anidados de forma profunda. 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

  • Se corrigió un error en el que Safe Args no podía importar la clase de Directions asociada con las acciones globales. b/123307342

Versión 1.0.0-alpha10

23 de enero de 2019

Errores conocidos

  • Safe Args no puede importar la clase de Directions asociada con las acciones globales. b/123307342

Esta versión contiene 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 de Kotlin aplicando el 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 sobre el patrón de compilador, que aún está disponible a través del complemento androidx.navigation.safeargs anterior. b/110263087

Cambios en el comportamiento

  • Los vínculos directos coincidentes ahora están sesgados hacia el vínculo directo con más argumentos coincidentes. b/118393029
  • Llamar a setGraph() en un NavController ahora restablecerá la pila de actividades. b/111450672
  • Los vínculos directos desconocidos ya no arrojan una IllegalStateException, pero se ignoran, lo que corrige los errores de NavHostFragment anidados o múltiples. b/121340440

Cambios rotundos

  • El método NavOptions.applyPopAnimationsToPendingTransition() que permite aplicar animaciones emergentes a una actividad se movió a ActivityNavigator. 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 de 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 de NavDirections generadas por Safe Args ya no tienen un constructor público; solo deben generarse a través de los métodos estáticos en las clases generadas de Directions. b/122963206
  • El 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 en el mismo destino mediante el uso de los argumentos que pasas para determinar la unicidad. b/120042732
  • NavController ahora procesa correctamente las operaciones de popBackStack() cuando se usa un NavHostFragment anidado u otros fragmentos secundarios con una pila de actividades. b/122770335
  • NavigationUI ahora configura correctamente la descripción del contenido del botón Arriba. b/120395362
  • Las clases de Directions generadas por Safe Args ahora procesan correctamente las acciones globales que tienen el mismo ID que una acción en un destino. b/122962504
  • Las clases de NavDirections generadas por Safe Args ahora tienen valores de hashCode() iguales cuando equals() muestra el valor "verdadero". b/123043662
  • FragmentNavigator ahora arroja un mensaje de error más claro si intentas implementar FragmentTransactions personalizadas en el FragmentManager de NavHostFragment. Siempre debes usar getChildFragmentManager(). b/112927148

Versión 1.0.0-alpha09

18 de diciembre de 2018

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

Decidimos 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, a fin de verificar que se estén realizando las llamadas correctas a navigate(). Este enfoque se desarrolla de forma detallada en la charla de actividad única de la Android Dev Summit 2018, y seguiremos trabajando en la documentación adicional específica acerca de las pruebas con Navigation.

Nuevas funciones

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

Cambios rotundos

  • Cuando usas un objeto <argument> con una 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 tu MenuItem para evitar que se muestre la pila de actividades. aosp/852869
  • Los métodos fromBundle() de las clases de Args generadas ahora toman un valor de Bundle no nulo en lugar de un valor de Bundle que puede ser nulo. aosp/845616

Correcciones de errores

  • Ahora se analizan correctamente los argumentos desde los vínculos directos, como el argType correcto, en lugar de hacerlo siempre como strings. b/110273284
  • Navigation ahora exporta de manera correcta sus recursos públicos. b/121059552
  • Safe Args ahora es compatible con el complemento de 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 contiene cambios importantes en la API. Consulta la sección Cambios rotundos a continuación.

Nuevas funciones

  • A partir de ahora, las etiquetas de destino que se usen con métodos de 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 cambió 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 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
  • Se cambió 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 se dio de baja. aosp/835684
  • Se quitó el método NavigationUI.navigateUp(DrawerLayout, NavController) que se dio de baja. 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 su lugar, llama a navigate() en el Navigator. aosp/830663
  • Se realizó una refactorización importante de Navigator: se eliminó 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 varios errores que generaban una IllegalArgumentException al usar gráficos anidados. (b/118713731, b/113611083, b/113346925, b/113305559).
  • Ahora el atributo dataPattern de los destinos <activity> propagará los argumentos de argumentos que no son de string mediante una llamada a toString(). b/120161365

Safe Args

  • Safe Args admite los objetos con serialización, 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 corresponde. 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 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.
  • Ya no se admiten los gráficos de navegación registrados del manifiesto de metadatos. b/118355937
  • Las acciones ya no se pueden adjuntar a los destinos de <activity>. aosp/785539

Correcciones de errores

  • Los vínculos directos ahora analizan correctamente los parámetros de búsqueda. b/110057514
  • Los destinos de Activity ahora aplican correctamente todas las animaciones de entrada y salida. b/117145284
  • Se corrigió la falla que ocurre después de los cambios de configuración cuando se usan atributos Navigator personalizados. b/110763345

Safe Args

  • Los argumentos seguros ahora tienen una dependencia fija en el complemento de Gradle para Android 3.2.1. b/113167627
  • Ahora se pueden generar Directions para las clases internas. b/117407555
  • Se corrigió un error con la generación de Directions para un gráfico de <include>. b/116542123

Versión 1.0.0-alpha06

20 de septiembre de 2018

Nuevas funciones

Cambios en la API

  • Cambio rotundo: el método navigate() de Navigator ahora 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 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 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 el uso de mayúsculas mediales en los nombres de métodos NavDirections correspondientes.
    • 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 valores nulos en argumentos parcelables y de strings, agrega app:nullable="true". b/79642307
  • Ahora puedes usar app:type="long" con defaultValues en forma de "123L". b/79563966
  • Ahora se admiten los argumentos parcelables mediante el uso de un nombre de clase completamente 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 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 solucionó el problema por el que todos los valores app:defaultValue se pasaban como strings. b/110710788
  • Ahora el aapt2 empaquetado con el complemento de Gradle para Android 3.2 Beta 01 agrega reglas de mantenimiento para cada atributo android:name en los archivos en formato XML de Navigation. b/79874119
  • Se solucionó la fuga 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 framework para compilar la navegación desde la app. Esta versión inicial es 1.0.0-alpha01.