Navegación
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
13 de noviembre de 2024 | 2.8.4 | - | - | 2.9.0-alpha03 |
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
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.8.4" // 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" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.4" // 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") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
如需将 Safe Args 添加到您的项目,请在顶层 build.gradle
文件中包含以下 classpath
:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您还必须应用以下两个可用插件之一。
如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块的 build.gradle
文件中:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
根据迁移到 AndroidX 文档,您的 gradle.properties
文件中必须具有 android.useAndroidX=true
。
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.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 2.9
Versión 2.9.0-alpha03
13 de noviembre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.9.0-alpha03
. La versión 2.9.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- La seguridad del tipo de Navigation ahora admite clases de valor como una ruta o como el tipo de argumento de una ruta. (I9344a, b/374347483)
Correcciones de errores
- Se corrigió un
ConcurrentModificationException
que podía ocurrir cuando unLifecycleObserver
adjunto a unNavBackStackEntry
activaba un cambio en la pila de actividades cuando elLifecycleOwner
del host, como la actividad o el fragmento que lo contiene, cambiaba su estado de ciclo de vida. (Ia9494)
Versión 2.9.0-alpha02
30 de octubre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.9.0-alpha02
. La versión 2.9.0-alpha02 contiene estas confirmaciones.
Contribución externa
- Nuevo método
NavController.handleDeepLink(request: NavDeepLinkRequest)
común. Gracias, Konstantin Tskhovrebov. (I3e228).
Versión 2.9.0-alpha01
16 de octubre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.9.0-alpha01
. La versión 2.9.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Los navegadores personalizados ahora pueden marcar sus destinos como implementadores de la interfaz
SupportingPane
, lo que le indica alNavController
que estos destinos se mostrarán junto con otros. Por ejemplo, con esta interfaz, varios destinos pueden serRESUMED
al mismo tiempo. (Id5559). - A partir de Navigation
2.8.3
: Se agregaron nuevas verificaciones de lint para los módulosnavigation-common
,navigation-runtime
ynavigation-compose
para ayudar a identificar las rutas seguras de tipo que no están correctamente anotadas con@Serializable
. Esta verificación se aplica a todas las funciones de extensiónNavGraphBuilder
yNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816). - A partir de Navigation
2.8.3
: Se agregaron nuevas verificaciones de lint para los módulosnavigation-common
,navigation-runtime
ynavigation-compose
para ayudar a identificar rutas seguras de tipo con argumentos de Enum que no están anotados correctamente con@Keep
. Esta verificación se aplica a todas las funciones de extensiónNavGraphBuilder
yNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142).
Cambios en el comportamiento
- Si intentas usar un
NavController
que ya seDESTROYED
, se generará unIllegalStateException
. (I520da, b/369616172)
Correcciones de errores
- Se actualizó la excepción de no encontrar la clase Enum para sugerir el uso de la anotación
@Keep
en caso de que la clase Enum se borre en compilaciones reducidas. (I90e79, b/358137294).
Errores conocidos
- Hay un problema con las nuevas reglas de lint que se agregaron en
Navigation 2.8.*
, que causa un errorObsolete custom lint check
cuando se intenta ejecutar lint con el complemento de Android para Gradle 8.4 y versiones posteriores (b/368070326, b/371463741).
Versión 2.8
Versión 2.8.4
13 de noviembre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.8.4
. La versión 2.8.4 contiene estas confirmaciones.
Nuevas funciones
- A partir de Navigation
2.9.0-alpha03
, la seguridad de tipo de Navigation ahora admite la clase de valor como ruta o como el tipo de argumento de una ruta (I9344a, b/374347483).
Correcciones de errores
- A partir de Navigation
2.9.0-alpha01
: Si intentas usar unNavController
que antes eraDESTROYED
, ahora se producirá unIllegalStateException
. (I520da, b/369616172)
Versión 2.8.3
16 de octubre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.8.3
. La versión 2.8.3 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron nuevas verificaciones de lint para los módulos
navigation-common
,navigation-runtime
ynavigation-compose
para ayudar a identificar las rutas de tipo seguro que no están correctamente anotadas con@Serializable
. Esta verificación se aplica a todas las funciones de extensiónNavGraphBuilder
yNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816). - Se agregaron nuevas verificaciones de lint para los módulos
navigation-common
,navigation-runtime
ynavigation-compose
para ayudar a identificar rutas seguras de tipo con argumentos de Enum que no están anotados correctamente con@Keep
. Esta verificación se aplica a todas las funciones de extensiónNavGraphBuilder
yNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142).
Correcciones de errores
- Se solucionó un problema en el que las nuevas reglas de lint que se agregaron en
Navigation 2.8.*
causaban un errorObsolete custom lint check
cuando se intentaba ejecutar lint con el complemento de Gradle para Android 8.4 y versiones posteriores (I1be3d, b/368070326, b/371463741).
Errores conocidos
- La comprobación de lint de Navigation arrojará un error de comprobación de lint personalizada obsoleta cuando se intente ejecutar lint con Lint 16 (AGP 8.7) o versiones posteriores. (b/371926651).
Versión 2.8.2
2 de octubre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.8.2
. La versión 2.8.2 contiene estas confirmaciones.
Nuevas funciones
- La seguridad de tipos de Navigation ahora admite clases serializables que incluyen
Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
yList<Double>?
sin requerir ningúnNavType
personalizado. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753).
Correcciones de errores
- Se mejoró el mensaje de error para cuando Navigation no asigna el argumento de una ruta a un
NavType
. El nuevo mensaje de error contendrá el nombre del argumento, el nombre completamente calificado del argumento y el nombre completamente calificado de la ruta. (Id8416, b/346264232).
Versión 2.8.1
18 de septiembre de 2024
Lanzamiento de androidx.navigation:navigation-*:2.8.1
. La versión 2.8.1 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva regla de lint para garantizar el uso de la función
popBackStack
que toma un tipo de clase reificado cuando se intentapopBackStack
con APIs seguras para tipos. (Ief161, b/358095343).
Correcciones de errores
- La navegación ahora requiere que la ruta que se pasa a
startDestination
deNavGraph
contenga los valores de todos los argumentos obligatorios, lo que incluye argumentos que no son anulables y no tienen un valor predeterminado. (I18e74, b/362594265). - Safe Args de Navigation agregó compatibilidad con cadenas no anulables, de modo que los valores "null" se analicen y almacenen en el paquete tal como están. Esto se aleja del comportamiento existente en el que los valores "null" se analizan en un objeto nulo. Este cambio solo se aplica a los tipos de String no nulos. Las cadenas anulables no se modifican. (I08b4a, b/348936238).
- Ya no se puede establecer un vínculo directo a un
NavDestination
, excepto a través de un vínculo directo que se haya agregado de forma explícita al destino. Esto también significa que solo puedes navegar a la ruta de un destino con la sobrecarga de la función de navegación que toma una ruta de cadena. Se corrigió una vulnerabilidad que permitía establecer un vínculo directo a un destino potencialmente protegido. (Ie30e6).
Actualización de dependencia
- Safe Args de Navigation ahora depende de Kotlin 1.9.24, en lugar de Kotlin 2.X, lo que garantiza que los desarrolladores no se vean obligados a actualizar. (a4129a).
- Navigation Compose ahora depende de Compose
1.7.2
.
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 la DSL de Kotlin (que usa Navigation Compose) con la serialización de Kotlin para permitirte definir destinos en tu gráfico de navegación a través de objetos y clases de datos seguros de tipos:
// 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 Navigation Compose meet Type Safety para obtener más información.
Retroceso predictivo de Navigation Compose
- Navigation Compose ahora admite el gesto atrás predictivo en la app a través de las nuevas APIs de
SeekableTransitionState
de compose-animation. Esto te permite usar el gesto atrás para ver el destino anterior con tu transición personalizada antes de decidir si confirmar la transacción con el gesto completado o cancelarla.
Fragmento de Navigation componible
- Se agregó un nuevo artefacto
navigation-fragment-compose
que incluye una alternativaComposableNavHostFragment
aNavHostFragment
que te permite agregar destinos componibles a tus archivos en formato XML de Navigation. Cada destinocomposable
debe expresarse como un método@Composable
de nivel superior sin argumentos cuyo nombre completamente calificado se use como el atributoandroid: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 deNavType<T>
para argumentos basados en colecciones, como listas, arrays y mapas. Todos los arraysNavType
predeterminados (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
yStringArrayType
) ahora heredan de esta nueva clase. NavType
ahora tiene compatibilidad integrada con listas de Int, String, Boolean, 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 pasaban clases de Enum de nivel superior como argumentos seguros de tipo. (I0ba76, b/358137294).
- Navigation 2.8 ahora funciona correctamente con el SDK 34 y no 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 enumeraciones anidadas en otra clase de forma predeterminada. Los enums de nivel superior serán compatibles con la próxima versión.
Correcciones de errores
- Cuando navegues a destinos duplicados o compartidos, la navegación priorizará el destino coincidente más cercano a la ubicación actual en el gráfico. (Ic89a4, b/352006850).
- La navegación en SafeArgs ahora agregó un nuevo
NavType.EnumType
. Esto significa que los tipos deEnum
ya no requierenNavType
personalizados. Ten en cuenta que elSerialName
deEnum
debe ser el nombre completamente calificado predeterminado. (I66d22, b/346475493). - Navigation en Safe Args agregó compatibilidad integrada para tipos de argumentos nulos,incluidos
Int?
,Long?
,Float?
,Boolean?
yEnum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - El
startDestination
deNavGraph
ahora usará los valores de argumento predeterminados si la rutastartDestination
que se pasa aNavGraph
es exactamente igual astartDestination.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 en el que las verificaciones de lint
WrongStartDestinationType
no verificaban objetos Companion 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 losNavGraphs
anidados comparten la misma ruta destartDestination
. (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 cadenas vacías en los argumentos de ruta. (Ic5dbd, b/339481310).
- Se mejoró el mensaje de error para los serializadores personalizados declarados directamente en los campos de clase a través de
@Serializable(with =...)
para aclarar que, actualmente, esta es una función no admitida. (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 paquetes. (I76cdc, b/340966212). - Se corrigió la falla del restablecimiento del estado cuando se reanudaba la app después del cierre del proceso con el uso de la navegación de seguridad de tipos en Compose. (Ia8f38, b/341801005).
- Se corrigió un problema en Navigation Compose por el que, después de cancelar el gesto atrás predictivo, el
NavBackStackEntry
al que regresa el usuario nunca vuelve al estado de ciclo de vidaRESUMED
. Esto también garantiza que el destino que se muestra vuelva a animarse correctamente en lugar de encajar en su lugar después de un deslizamiento. (I97a0c, b/346608857). - Cuando se usa Atrás predictivo con Navigation Compose, el destino que se muestra ahora tendrá el orden en Z correcto 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 abstractoemptyCollection()
. Anula esta acción para controlar una colección vacía que se pasa como argumento. (Ie4d84, b/341723133).
Correcciones de errores
- Se agregó documentación sobre
NavType.serializeAsValue
yserializeAsValues
para destacar que los resultados finales deben estar codificados como Uri. (Ida6bd, b/344943214). - Se corrigió la falla que se producía cuando se llamaba a
toRoute<T>
con un argumentoCollectionNavType
nulo. Cuando navegues con unCollectionNavType
nulo, el argumento de salida será el valor predeterminado declarado en tu clase Serializable o el valor que se muestra deemptyCollection()
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ó la falla de
ClassCastException
que se producía cuando se usabaNavBackStackEntry.toRoute
con unNavType
personalizado nulo. (I1c29b, b/342239473). - Se corrigieron los problemas de restauración del estado de la pila de actividades de Navigation que se producían cuando se intentaba restaurar una entrada de la pila de actividades a la que no se podía acceder a través del ID desde el destino actual. Dado que las rutas tienen respaldo de IDs, los destinos compilados con rutas también se vieron afectados. Esto también corrige una falla causada por llamar 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ámetrotypeMap
para los tipos de argumentos personalizados. (Ie39fb, b/339026523).- Se agregó una API de prueba a
navigation-testing
para crear unSavedStateHandle
a partir de un objeto serializable de Kotlin. (Id4867, b/339080702).
Correcciones de errores
- Se agregaron los documentos de parámetros faltantes para las funciones de 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 de la DSL de Kotlin de Navigation basada en la serialización de Kotlin, y las APIs que antes eran experimentales ahora son estables. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139).
Esta funcionalidad usa la serialización de Kotlin para permitirte definir destinos en tu gráfico de navegación a través de objetos y clases de datos seguros para el tipo:
// 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 Navigation Compose meet Type Safety para obtener más información.
Nuevas funciones
- El artefacto
navigation-fragment-compose
ahora proporciona una composiciónLocalFragment
local a los métodos componibles dentro de unComposableFragment
. (If35e5). NavType
ahora tiene compatibilidad integrada con listas de Int, String, Boolean, 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
Se agregó un nuevo artefacto
navigation-fragment-compose
que incluye una alternativaComposableNavHostFragment
aNavHostFragment
que te permite agregar destinoscomposable
a tus archivos en formato XML de Navigation. Cada destinocomposable
debe expresarse como un método@Composable
de nivel superior sin argumentos cuyo nombre completamente calificado se use como el atributoandroid: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
- Se continuó con la compatibilidad con Safe Args en Navigation Compose mediante 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 plataforma de la API en una versión futura. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139).
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 mediante 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 plataforma de la API en una versión futura. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139).
Correcciones de errores
NavHost
ahora usaAlignment.TopStart
como el argumento contentAlignment predeterminado. Esto lo alinea con el valor predeterminado deAnimatedContent
y corrige algunas instancias de una escala inesperada de la transición central. (I09e72, b/330111602).- Cuando se desliza el gesto atrás predictivo mientras se usa Navigation Compose,
NavHost
ahora completará correctamente la transición personalizada en lugar de terminar 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 a
startDestination
deNavGraph
directamente en la ruta destartDestination
sin depender dedefaultValue
. Esto también se aplica a losstartDestinations
NavGraph
anidados. (I0e0b5, b/109505019, b/188693139).
Cambios en la API
- Se agregó una nueva clase abstracta
CollectionNavType<T>
, una subclase deNavType<T>
para argumentos basados en colecciones, como listas, arrays y mapas. (Ic6d63, b/188693139) - Todos los arrays
NavType
predeterminados (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
yStringArrayType
) ahora son del tipoCollectionNavType
(Idcf79, b/188693139). NavType
ahora proporciona una nueva API abierta devalueEquals
que determina si dos valores del mismo tipo son iguales entre sí. (I6cb97, b/327229511)
Correcciones de errores
- Los parámetros de consulta en los vínculos directos ahora permiten valores en forma de llaves alrededor del nombre del argumento (es decir,
{argName}
) como valores válidos paraNavTypes
basados en cadenas. De esta manera, se soluciona un problema por el que ese valor se consideraría no válido (o ausencia de valor) para todos los tipos. (I18302, b/327274038). - Las funciones
NavController
que admiten rutas comonavigate
opopBackStack
ahora pueden coincidir correctamente con rutas completadas con argumentos de ArrayNavTypes
. (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 definiéndolo como parte de la inicialización de las funcionescomposable
onavigation
. (I91062, b/296912651)
Correcciones de errores
- Se corrigió un problema por el que
NavHost
en Navigation de Compose no mostraba correctamente la transición cuando se usaba el gesto 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 debe estar en el subproceso principal de todos modos. (Ibb988, b/299523245).
Correcciones de errores
- Se corrigió un problema en Navigation que causaba que los ViewModels de
NavGraph
fueranDESTROYED
demasiado pronto porque elViewModel
de la entrada asociada no formaba parte del estado guardado. (Ib6bb7, b/317581849)
Actualización de dependencia
- Navigation Compose ahora depende de Compose 1.7.0-alpha03.
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 admite el gesto atrás predictivo en la app a través de las nuevas APIs de
SeekableTransitionState
de compose-animation. Esto te permite usar el gesto atrás para ver el destino anterior con tu transición personalizada antes de decidir si confirmar la transacción con el 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 filtración de
BackStackState
en la que varias llamadas asaveState
en un destino generaban 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 String no se mostraban correctamente cuando se usaban los ayudantes
NavigationUI
para propagar el título de las barras de la app. (#636, b/316676794)
Actualización de dependencia
- Navigation Compose ahora depende de Compose
1.7.0-alpha01
, lo que soluciona un problema que podría causar una animación de escala inesperada. (b/297258205).
Contribución externa
- Gracias a SimonMarquis por solucionar el problema de visualización de los argumentos que no son de cadena cuando se usan los ayudantes
NavigationUI
para completar 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
- Se portó a versiones anteriores desde Navigation
2.8.0-alpha01
: Se corrigió la filtración deBackStackState
en la que varias llamadassaveState()
en un soloNavBackStackEntry
provocaban que se guardaran varios estados, pero solo se podía restablecer el primero. (I598b0, b/309559751). - Se portó a versiones anteriores desde Navigation
2.8.0-alpha01
: Se corrigió un problema por el que los argumentos que no eran de String no se mostraban correctamente cuando se usaban los ayudantesNavigationUI
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 los argumentos que no son de cadena cuando se usan los ayudantes
NavigationUI
para completar 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()
deNavGraph
ahora considera correctamente los nodos del otro gráfico en lugar de solo el que llama. Esto garantizará que los gráficos que tengan nodos con IDs diferentes 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ó mucho el rendimiento (en términos de tiempo y cantidad de asignaciones) de 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 generan menos fotogramas omitidos. Gracias, Michał Z, por el análisis exhaustivo que llevó 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 corrigió un problema por el que se quitaba la pila de actividades si llamabas a
setGraph
más de una vez con el mismo gráfico exacto solo si había un destino en el gráfico que contenía una acción que vinculaba dos destinos. (Ieaed7). - Los diálogos a los que se navegó y se descartaron en rápida sucesión ya no se filtrarán en la lista de
NavController.visibleEntries
. (I67586, b/287969970). - Cuando se quita una entrada seguida de un cambio de configuración, el
ViewModel
de la entrada ahora se borrará correctamente sisaveState
es falso. (Idf242, b/298164648). - Se solucionó 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 una llamada asetGraph
solo cuando el intent entrante tenía establecida la marcaFLAG_ACTIVITY_NEW_TASK
. (I73c7f).
Actualizaciones de dependencias
- La navegación con fragmentos ahora depende de Fragment 1.6.2, lo que soluciona un problema por el que no se borraban las instancias de
ViewModel
de fragmentos anidados cuando se llamaba aclearBackStack
.
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 con
popUpTo
para usar rutas con argumentos que permitan volver a una entrada específica que use esos argumentos exactos, lo que coincide con la compatibilidad que se encuentra enpopBackStack
. (I731f4, b/299255572).
Correcciones de errores
- Se corrigió un problema en el que interrumpir una navegación con otra navegación con
popUpTo
causaba queFragmentNavigator
fallara. (I3c848, b/301887045). - Se solucionó un problema por el que presionar el botón Atrás del sistema causaba que
currentDestination
no se actualizara correctamente para coincidir con el fragmento que se mostraba. (Id0d6c, b/289877514) - El ciclo de vida de
DialogFragment
ahora pasará correctamente al estadoRESUMED
cuando se descarte el diálogo que está encima de él. (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 solucionó un problema en Navigation con fragmentos que causaba que la lista
visibleEntries
tuviera entradas incorrectas. (I5caa9, b/288520638). - Se corrigió un problema por el que el destino de la ventana flotante (es decir,
Dialogs
,Bottomsheets
, etc.) nunca recibía una devolución de llamada de ciclo de vidaRESUMED
. (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 entrerememberSaveable
yNavHost
de Navigation Compose que causaba que el estadorememberSaveable
de los destinos y cualquier instanciaSavedStateHandle
deViewModel
no se restableciera correctamente después de la finalización y la recreación del proceso. (b/298059596, b/289436035). - Se solucionó un problema que se generaba cuando se mostraban varios diálogos en Navigation Compose de forma simultánea, en los que los diálogos parcialmente ocultos (p.ej., no el diálogo superior) se encontraban en el estado de ciclo de vida
CREATED
en lugar del estadoSTARTED
. (aosp/2728520, b/289257213). - Se solucionó un problema que se generaba cuando se mostraban varios diálogos en Navigation Compose de forma simultánea, en el que descartar el diálogo superior provocaba que el nuevo diálogo superior quedara atascado en el estado de ciclo de vida
STARTED
en lugar de pasar correctamente aRESUMED
. (aosp/2629401, b/286371387). - Safe Args de Navigation ya no crea instancias de su tarea de forma ansiosa 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
, se podía obtener un error por intentar acceder a unViewModel
deLifecycle.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 de Accompanist
Ahora que AnimatedContent
es estable, pudimos mover el código de Accompanist Navigation Animation a Navigation Compose.
Esto significa que toda la compatibilidad para establecer transiciones personalizadas que existía en AnimatedNavHost
es directamente compatible con NavHost
.
No se realizarán cambios adicionales en la animación de Navigation de Accompanist, y pronto la daremos de baja oficialmente, junto con una guía para volver a migrar a Navigation Compose. Sin embargo, será lo inverso a la guía de migración, y no se requerirán otros cambios en la 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 del sistema Atrás, incluso después de que la actividad se DETUVO y se REACTIVÓ. (Icb6de, b/279118447).
Actualizaciones de dependencias
- Navigation ahora depende de Compose
1.5.0
a partir de1.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 solucionó un problema por el que los lambdas
EnterTransition
yExitTransition
creados como parte deNavHost
podían permanecer en la memoria incluso después de que se quitabaNavHost
de la composición. (I893d0)
Errores conocidos
- Hay un problema de Navigation 2.6.x que, cuando se navega con popUpTo, puede causar un
IllegalArgumentException
. Es posible que se pueda evitar esta excepción si se reestructura el grafo, de manera similar al consejo 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 en Z correcto para las transiciones personalizadas que usan la opción de navegación con
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 al botón Atrás del sistema, incluso después de queActivity
haya sidoSTOPPED
yRESUMED
. (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 de Accompanist
Ahora que AnimatedContent
es estable, pudimos mover el código de Accompanist Navigation Animation a Navigation Compose.
Esto significa que toda la compatibilidad para establecer transiciones personalizadas que existía en AnimatedNavHost
es directamente compatible con NavHost
.
No se realizarán cambios adicionales en la animación de Navigation de Accompanist, y pronto la daremos de baja oficialmente, junto con una guía para volver a migrar a Navigation Compose. Sin embargo, será lo inverso a la guía de migración, y no se requerirán otros cambios en la 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 fragmentos en el que navegar conpopUpTo
y quitar un fragmento de la pila de actividades sin volver a crear su vista hacía que el botón Atrás del sistema dejara 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 la versión 2.5.0
- El
arguments
deNavBackStackEntry
y elarguments
pasado a unOnDestinationChangedListener
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 aarguments
o a otras instancias deOnDestinationChangedListener
. 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 anularserializeAsValue
para serializar un valor en una String, lo que permite que la serialización y la deserialización (a través deparseValue
) se encapsulen por completo en la claseNavType
.StringType
ahora anula este método para llamar aUri.encode
en elString
determinado
Cambios importantes en Navigation Compose desde la versión 2.5.0
- Cuando se obtiene una vista previa de un elemento componible con
NavHost
, ahora se mostrará elstartDestination
de NavGraph de forma predeterminada - Ahora,
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
yNavController.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 KotlinnavDeepLink
, 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 en Navigation con fragmentos desde la versión 2.5.0
NavHostFragment
ya no intercepta el botón Atrás del sistema. Esto permite que elFragmentManager
subyacente controle el gesto atrás del sistema. Esto permite que Fragment1.7.0-alpha01
y versiones posteriores proporcionen una animación de atrás predictivo en la app en dispositivos Android U.- Cuando se usa Navigation con Fragments, intentar realizar manualmente una
FragmentTransaction
que agregue un fragmento a la pila de actividades deFragmentManager
ahora arrojará unaIllegalArgumentException
. Siempre debes agregar fragmentos a través de la API denavigate()
. - Cuando se usa la string exacta
${applicationId}
como marcador de posición en los atributosapp:data
yapp: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 elpackageName
del contexto ante el aumento FragmentNavigator
ahora usa las APIs de transición cuando navegas y abresNavBackStackEntries
. Esto significa que elLifecycle
deNavBackStackEntry
ahora esperará a que se completen los efectos especiales de entrada y salida de los fragmentos antes de mover suLifecycle.State
finalDialogFragmentNavigator
ahora usa las APIs de transición cuando navegas y abresNavBackStackEntries
. Esto significa que elLifecycle
deNavBackStackEntry
ahora esperará a que elLifecycle
deDialogFragment
se mueva aDESTROYED
antes de moverse aDESTROYED
NavHostFragment
ahora te permite recuperarNavController
en cuantoNavHostFragment
se conecta aFragmentManager
, en lugar de solo después deonCreate()
.- 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 la versión 7.3.0 o posterior.
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 unMenu
),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ónisTopLevelDestination
enAppBarConfiguration
- Las integraciones de
setupWithNavController
enNavigationUI
para trabajar con la barra superior de la app ahora analizarán los valoresR.string
para los argumentosReferenceType
que se encuentran en tuandroid: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 unMenuItem
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 solucionó un problema con la navegación en fragmentos en el que navegar con
popUpTo
y quitar un fragmento de la pila de actividades sin volver a crear su vista hacía que el botón Atrás del sistema dejara 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 en el que quitar un fragmento a través de la navegación con
popUpTo
en su devolución de llamada de ciclo de vidaonResume()
causaba unIllegalStateException
. (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 personalizada detoString
. (Iff00b).
Correcciones de errores
- Cuando se usa Navigation con Fragments, intentar realizar manualmente una
FragmentTransaction
que agregue un fragmento a la pila de actividades deFragmentManager
ahora arrojará unaIllegalArgumentException
. Siempre debes agregar fragmentos a través de la API denavigate()
. (I6d38e). - Cuando hay un
navigate
que agrega una entrada y unpopBackStack
que la quita en el mismo marco, la entrada superior resultante en la pila de actividades ahora volverá de forma coherente a laLifecycle.State
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 ruta no válidas, de modo que, si un
NavDestination
contieneNavArgument
no nulo, la ruta de este destino debe contener marcadores de posición para los argumentos que se llaman igual que elNavArgument
no nulo. (Ic62bf, b/274697949). - Las navegaciones de vínculo directo basadas en
Action/MimeType
ahora fallarán si a la operación de navegación le falta unNavArgument
no anulable que requiere elNavDestination
con el que coincideAction/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 sus nodos de gráfico actuales y sus destinos de pila de actividades con instancias nuevas. Se corrigió una falla que se producía cuando se usabaonLaunchSingleTop
sin guardar el estado en Navigation Compose. Esto también corrige un error por el que se navegaba a destinos asociados con las compilaciones del gráfico raíz y una 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 recuperarNavController
en cuantoNavHostFragment
se conecta aFragmentManager
, en lugar de solo después deonCreate()
. (Ic6382, b/220186282)
Correcciones de errores
- Se corrigió una
NullPointerException
cuando se mostraba un gráfico anidado que incluye un argumento no anulable. (6b3581, b/249988437). - Cuando se usa el botón Atrás del sistema después de navegar con
popUpTo
, el estado deNavController
aparecerá en la entrada correcta. (I3a8ec, b/270447657). FragmentNavigator
ahora mostrará correctamente las entradas cuando se quite la pila de actividades a través del botón Atrás del sistema opopBackStack()
, y si la transacción usa efectos para el fragmento o no. (I81bdf).- Agregar fragmentos al
FragmentManager
deFragmentNavigator
sin usar Navigation ya no causará fallas. (b17204, b/274167493).
Actualizaciones de dependencias
- Navigation ahora depende de Lifecycle
2.6.1
. (586fe7). - Navigation ahora depende de SavedState
1.2.1
. (078e4e). - Ahora Navigation depende de ProfileInstaller
1.3.0
. (512f0c).
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 de
getBackStackEntry
,popBackStack
yclearBackStack
que toman rutas ahora toman patrones de ruta con argumentos nulos y parámetros de consulta nulos (I22294, b/269302500). - Se solucionó un problema por el que llamar a
clearBackStack()
desdeNavController
no 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 elBottomNavigationView
cuando se usaba el botón Atrás del sistema entre las pestañas. (I634f6, b/270447657). - Se corrigió la regresión en 2.6.0-alpha06 que causaba que los
NavBackStackEntry
no se movieran al estado RESUMED cuando se usabanAnimation
. (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á elstartDestination
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 se usa Navigation con fragmentos, el ciclo de vida de
NavBackStackEntry
no llega aRESUMED
cuando se usan las APIs deAnimation
. (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 se usa Navigation con Fragments, después de restablecer el estado, el
Lifecycle
NavBackStackEntry
no obtieneDESTROYED
cuando su fragmento esDESTROYED
. (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)
yNavController.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 abresNavBackStackEntries
. Esto significa que elLifecycle
deNavBackStackEntry
ahora esperará a que se completen los efectos especiales de entrada y salida de los fragmentos antes de mover suLifecycle.State
final (I3cb19, b/238686802).DialogFragmentNavigator
ahora usa las APIs de transición cuando navegas y abresNavBackStackEntries
. Esto significa que elLifecycle
deNavBackStackEntry
ahora esperará a que elLifecycle
deDialogFragment
se mueva aDESTROYED
antes de moverse aDESTROYED
(I53ee5, b/261213893).
Cambios en la API
NavigatorState
ahora proporciona la API deprepareForTransition
para permitir que los elementosNavigator
muevanNavBackStackEntries
a objetosLifecycle.State
intermedios (I42c21, b/238686802).- Ahora puedes acceder a la pila de actividades asociada con un
NavGraphNavigator
o unComposeNavigator
a través de una propiedadbackstack
.ComposeNavigator
ahora también expone la devolución de llamadaonTransitionComplete()
para marcar unNavBackStackEntry
que haya ejecutado como completa una navegación o una operación depopBackStack
(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 elementoNavGraph
anidado, todos los destinos que comienzan desde el destino original hasta sustartDestination
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 marcalaunchSingleTop
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 anularserializeAsValue
para serializar un valor en una String, lo que permite que la serialización y la deserialización (a través deparseValue
) se encapsulen por completo en la claseNavType
.StringType
ahora anula este método para llamar aUri.encode
en elString
determinado (Ie5213, b/247637434). NavigationUI
ahora proporciona registros cuando no puede navegar a través de unMenuItem
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á unaNoSuchElementException
cuando no haya un destino disponible para que el elementoCrossfade
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 derememberSaveable
) cuando se quitaba un destino de la pila de actividades (I64949).
Actualizaciones de dependencias
- Ahora Navigation depende de Fragment
1.5.4
(Icd424).
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 unMenu
),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ónisTopLevelDestination
enAppBarConfiguration
(Ie936e, b/238496771).
Correcciones de errores
- El componente
navigation:navigation-fragment
ahora depende de la versión1.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
enNavigationUI
para trabajar con la barra superior de la app ahora analizarán los valoresR.string
para los argumentosReferenceType
que se encuentran en tuandroid: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 atributosapp:data
yapp: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 elpackageName
del contexto ante el aumento (Iaabde, b/234223561). - Si intentas crear un
NavDeepLink
vacío con el DSL de KotlinnavDeepLink
, 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 deandroid:label="{arg}"
en una String. Admite argumentosReferenceType
mediante el análisis de valoresR.string
en sus valores de String (I07d89, b/236269380).
Cambios en el comportamiento
- El
arguments
de NavBackStackEntry y elarguments
pasado a unOnDestinationChangedListener
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 aarguments
o a otras instancias deOnDestinationChangedListener
(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 marcalaunchSingleTop
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á unaNoSuchElementException
cuando no hay un destino disponible para queCrossfade
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
- Ahora Navigation
2.5.2
depende de Fragment1.5.2
(aosp/2178734).
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 unBundle
(Id86ed, b/237725966).
Actualizaciones de dependencias
- La biblioteca de Navigation ahora depende de Lifecycle
2.5.1
(Ib4451). - La biblioteca de Navigation ahora depende de Activity
1.5.1
(I3efe8). - La biblioteca de Navigation ahora depende de Fragment
1.5.1
(I56177).
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 unViewModelProvider.Factory
sin estado a través delCreationExtras
de Lifecycle2.5.0
.
Safe Args de Navigation
Navigation Safe Args
actualizó la dependenciaAndroid Gradle Plugin
a fin de basarse en7.0.4
, lo que dejó de brindar compatibilidad con las versiones de AGP antes de7.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 conNavController
.
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 unapplicationIdSuffix
y un espacio de nombres sinapplicationId
, o cuandoapplicationId
y el espacio de nombres difieran. (I754b1, b/233119646)NavArgument
ahora tiene una funcióntoString()
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 archivonavigation.xml
(Ic15a5, b/178403185).
Correcciones de errores
- Los alcances de los elementos componibles
NavHost
yDialogHost
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
enArgumentsGenerationTask
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 aremember
que rodea a la llamada agetBackStackEntry()
también pase un objetoNavBackStackEntry
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 usapopWithTransition
cuando ejecuta una llamada dedismiss()
. Esto corrige una condición de carrera cuando se usa un elementoViewModel
dentro del destinodialog
que causaba unIllegalStateException
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 objetoIllegalStateException
cuando se anida unNavHost
dentro de otroNavHost
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
visibleEntries
ya no es experimental. (I4829f, b/225394514)
Correcciones de errores
- NavHost ahora depende de
visibleEntries
deNavController
para determinar qué entradas componer. Esto significa que, cuando se usa el NavHost anidado, el objetoNavHost
interno ahora debe animarse correctamente. (I4ba2b, b/225394514) - El
StateFlow
devisibleEntries
que proporcionaNavController
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 denavController
es inferior a STARTED, la lista de valores enteros visibles seguirá siendo la misma. (I9e2a8, b/225394514) SavedStateViewFactory
ahora admite el uso deCreationExtras
, incluso cuando se inicializó con unSavedStateRegistryOwner
. 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 hayaAndroidManifest.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
aby navGraphViewModels
para crear unViewModel
(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 conNavBackStackEntries
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á correctamenteOnBackPressedDispatcher
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 variosNavGraph
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
NavBackStackEntry
ahora se integra con ViewModel CreationExtras, que se introdujo como parte de Lifecycle2.5.0-alpha01
. (Ib9fe2, b/207012490)
Correcciones de errores
- Se solucionó un problema en el que fallaba el acceso a un
ViewModel
creado a través deby navGraphViewModels()
desde unonCreate()
de Fragment con unIllegalStateException
. (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
- Portabilidad a versiones anteriores de Navigation
2.5.0-alpha03
:NavDeepLinks
ahora admite correctamente nuevos caracteres de línea codificados e incorporados en rutas/URI de vínculos directos. (I513d1, b/217815060) - Portabilidad a versiones anteriores de Navigation
2.5.0-alpha03
: Navigation SafeArgs ahora admite el uso del espacio de nombres definido en elbuild.gradle
en lugar del paquete en el AndroidManifest. (I659ef, b/217414933) - Portabilidad a versiones anteriores de Navigation
2.5.0-alpha04
:Navigation Safe Args
ya no fallará cuando se usen espacios de nombres y no hayaAndroidManifest.xml
. (I17ccf, b/227229815) - Portabilidad a versiones anteriores de Navigation
2.5.0-alpha04
: Las strings vacías ahora se consideran argumentos válidos en vínculos directos. (I70a0d, b/217399862)
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 elementoOnBackPressedDispatcher
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 deby navGraphViewModels()
desde elonCreate()
de un fragmento fallaba con unIllegalStateException
(I8a14d). - Portabilidad a versiones anteriores de Navigation
2.5.0-alpha01
: LosNavDeepLink
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 nuevoAbstractListDetailFragment
. Este fragmento usa unSlidingPaneLayout
para administrar un panel de lista (que proporciona la subclase) y un panel de detalles, que utiliza unNavHostFragment
como su implementación, tal como se ve en nuestra implementación de ejemplo. - El método
currentBackStackEntryAsFlow()
enNavController
proporciona unFlow
que se emite cada vez que cambia elNavBackStackEntry
actual. Este flujo se puede usar como alternativa a la administración manual de unOnDestinationChangedListener
. - NavController ahora ofrece la capacidad de recuperar una lista de todas las instancias
NavBackStackEntry
visibles como unStateFlow
a través de la propiedadvisibleEntries
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()
ygetHierarchy()
que se pueden usar para implementar un método NavigationUI personalizado.findStartDestination()
es una función de extensión deNavGraph
que ubicará el destino de inicio real que se mostrará cuando navegues al gráfico, incluso sistartDestination
es unNavGraph
anidado.getHierarchy()
es una función enNavDestination
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 elementoBottomNavigationView
para que, en su lugar, tomenNavigationBarView
, la superclase que se introdujo en Material1.4.0
. De esta manera, se permite usar estos métodos conNavigationRailView
.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 sintaxisapp:enterAnim="?attr/transitionEnter"
.Safe Args ahora genera un método
fromSavedStateHandle()
para cada claseNavArgs
. (#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ó porpopUpToId
. - Se dio de baja la API de
getStartDestination()
y se la reemplazó porgetStartDestinationId()
.
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 destinoscomposable
ydialog
, 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 estadoRESUMED
cuando las transiciones que ingresan finalizan y de inmediato pasan aSTARTED
cuando se inicia cualquier transición de salida, lo que te permite evitar todas lasIllegalStateException
y problemas multitáctiles con solo activar una llamada anavigate
cuando elLifecycle
estáRESUMED
. - Alcance de
ViewModel
(a través de la API deviewModel()
de Lifecycle ViewModel Compose2.4.0
ohiltViewModel()
de Hilt Navigation Compose1.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 elonCleared()
de ViewModel que indica la eliminación permanente y la limpieza del estado asociado con esaNavBackStackEntry
. - 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()
ycurrentBackStackEntryAsState()
para permitir elevar el estado y conectar el objetoNavController
con elementos que admiten composición fuera deNavHost
(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 deapp:popUpToSaveState
yapp:restoreState
para guardar el estado de los destinos que se agregaron medianteapp:popUpTo
y restaurar el estado asociado al destino que se pasa comoapp: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 booleanarestoreState
y la propiedad booleanasaveState
en el compiladorpopUpTo
:// 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
medianteNavOptions.Builder
, puedes usar elsetRestoreState()
y la sobrecarga nueva ensetPopUpTo()
que toma un parámetrosaveState
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ámetrosaveState
adicional.Puedes usar el método
clearBackStack()
para borrar cualquier estado que se haya guardado conpopBackStack()
opopUpToSaveState
.
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 agregaPendingIntent.FLAG_IMMUTABLE
alPendingIntent
que muestracreatePendingIntent()
, lo que garantiza que esta API funcione como se espera cuando se orienta a Android 12.- Navigation actualmente depende de Lifecycle
2.3.1
y ahora marca asetGraph()
,popBackStack()
,navigateUp()
ynavigate()
, los métodos que actualizan elNavBackStackEntry
Lifecycle
, como@MainThread
, lo que alinea a Navigation con la aplicación de subprocesos principal que se introdujo en Lifecycle2.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 unViewModel
creado a través deby navGraphViewModels()
desde elonCreate()
de un fragmento fallará con unaIllegalStateException
. (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 restablecidoNavController
(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
deNavBackStackEntry
de un diálogo cuando este se descartaba (I6b96d, b/206465487). - Se corrigió un problema que se producía cuando se usaban destinos
activity
conNavHost
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, comoNavigationUI.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 aLifecycle.State.STARTED
cuandoNavHost
se agregaba directamente alsetContent()
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
enNavigationUI
mostrabatrue
incluso si en realidad no querías mostrarnavigate()
en ese gráfico de navegación. Ahora usa la misma lógica que usasetupWithNavController
de forma interna para seleccionar solo elMenuItem
asociado con el destino actual mediante elhierarchy
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 aNavDestination
. (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 atributoslayout_width
ylayout_weight
en el panel de lista que muestraonCreateListPaneView()
. (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 dedismiss()
paraDialogFragment
, 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 usaspopUpTo
opopBackStack()
para descartar el diálogo. (I77ba2) - Ahora,
AbstractAppBarOnDestinationChangedListener
tiene un mensaje de error más claro paraonDestinationChanged()
. (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 devisibleEntries
. (Ia964e) - Ahora,
rememberNavController()
toma un conjunto opcional de instancias deNavigator
que se agregarán alNavController
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()
yfromSavedStateHandle()
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 conpopBackStack()
opopUpToSaveState
. (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 denavigation-common
, en lugar denavigation-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 seanDESTROYED
. (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
ycurrentBackStackEntryFlow
cuando se usabalaunchSingleTop
. (Iaaebc)
Actualizaciones de dependencias
- Navigation Compose ahora depende de Activity Compose 1.3.1. (I05829)
- Navigation Compose ahora depende de Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
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
ypreviousBackStackEntry
dentro de composable(), junto conremember()
, 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 asetGraph
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 enLifecycle.State
deNavBackStackEntry
lo que implica que el uso deNavHost
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 estadoNavController
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ódigoViewModel
. (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()
yrequireDetailPaneNavHostFragment()
deAbstractListDetailFragment
agetSlidingPaneLayout()
ygetDetailPaneNavHostFragment()
, respectivamente. (I34a08)
Cambios en el comportamiento
- Cuando navegues con animaciones (como
Crossfade
), el nuevo destino deLifecycle
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 unUri
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 estadoRESUMED
. (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 apopBackStack()
desde unLifecycleObserver
adjunto deNavBackStackEntry
que lo producían las actualizaciones reentrantes en el estado del NavController. (I64621) AbstractListDetailFragment
ahora permite quitarSlidingPaneLayout
por completo del APK cuando no se usaAbstractListDetailFragment
. (I611ad)NavGraph
yNavDestination
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 nuevoAbstractListDetailFragment
. Este fragmento usa unSlidingPaneLayout
para administrar un panel de lista (que proporciona la subclase) y un panel de detalles, que utiliza unNavHostFragment
como su implementación, tal como se ve en nuestra implementación de ejemplo. (Iac4be, b/191276636) - El
NavHost
del artefactonavigation-compose
ahora admite destinos dedialog
además de los destinoscomposable
. Cada uno de estos destinos de diálogo se mostrará en unDialog
componible y flotante sobre el destinocomposable
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
enNavigatorState
porpush
. Todas las llamadas actuales aadd()
deberán cambiarse a push(). (Ie89fc, b/172112072) - Las instancias de
Navigator
personalizadas ahora pueden usar las API depushWithTransaction
ypopWithTransition
enNavigatorState
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 agregaPendingIntent.FLAG_IMMUTABLE
alPendingIntent
que muestracreatePendingIntent()
, 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 argumentostring[]
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 a1.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 quesetupActionBarWithNavController()
no quitaba correctamente el ícono Arriba cuando estabas en un destino de nivel superior. (I5d443, b/189868637) - Se corrigió un
IllegalStateException
cuando se llamaba apopBackStack()
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 usanavigation-common
o cualquier artefacto que dependa de él. (I68800, b/190082521) - Un
OnDestinationChangedListener
que llama anavigate()
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 Gradle6.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()
ygetHierarchy()
que se pueden usar para implementar un método NavigationUI personalizado.findDestination()
es una función de extensión enNavGraph
que ubicará un destino dentro del gráfico.getHierarchy()
es una función enNavDestination
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, tomenNavigationBarView
, la superclase que se introdujo en Material1.4.0
. De esta manera, se permite usar estos métodos conNavigationRailView
. (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 sintaxisapp:enterAnim="?attr/transitionEnter"
. (I07bc1, b/178291654)
Cambios en la API
- Los compiladores de DSL de Kotlin que usan un ID dejaron de estar disponibles y se deben reemplazar por compiladores que usan rutas. (I85b42, b/188816479) (I9f58f, b/188816479)
Correcciones de errores
DialogFragmentNavigator
ahora usa la API deNavigatorState.pop()
para informarle aNavController
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 estadoNavController
siempre se sincronice con el estado de Navigator. (I2ead9)Navigation ya no brinda
ConcurrentModificationException
cuando se usa la manipulación de la lista deOnDestinationChangedListeners
desde una devolución de llamadaonDestinationChanged
. (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
esresId
en lugar deresid
. (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()
enNavController
proporciona unFlow
que se emite cada vez que cambia elNavBackStackEntry
actual. Este flujo se puede usar como alternativa a la administración manual de unOnDestinationChangedListener
. (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 deapp:popUpToSaveState
yapp:restoreState
para guardar el estado de los destinos que se agregaron medianteapp:popUpTo
y restaurar el estado asociado al destino que se pasa comoapp: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 booleanarestoreState
y la propiedad booleanasaveState
en el compiladorpopUpTo
:// 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
medianteNavOptions.Builder
, puedes usar elsetRestoreState()
y la sobrecarga nueva ensetPopUpTo()
que toma un parámetrosaveState
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ámetrosaveState
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ó porpopUpToId
. (I59c73, b/172823546) - Se dio de baja la API de
getStartDestination()
y se la reemplazó porgetStartDestinationId()
. (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
yargument
, y las funciones de desestructuración deNamedNavArgument
ahora son públicas. (#174, b/181320559) - Se agregó una nueva extensión
NavBackStackEntry#provideToCompositionLocals
que proporciona laNavBackStackEntry
a las configuraciones locales de composición. (#175, b/187229439)
Safe Args
Safe Args ahora genera un método
fromSavedStateHandle()
para cada claseNavArgs
. (#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 Lifecycle
2.3.1
y ahora marca asetGraph()
,popBackStack()
,navigateUp()
ynavigate()
, los métodos que actualizan elNavBackStackEntry
Lifecycle
, como@MainThread
, lo que alinea a Navigation con la aplicación de subprocesos principal que se introdujo en Lifecycle2.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 directowww.example.com/{color}
, incluso cuando la enumeración tiene el valorRED
(#152, b/135857840)
Compatibilidad con Compose
androidx.navigation:navigation-compose:2.4.0-alpha01
solo es compatible con la versión Compose1.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 elDialogFragmentNavigator
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 claseNavArgs
. (#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
yargument
, y se desestructuraron funciones deNamedNavArgument
públicas. (#174, b/181320559) - Gracias a joyswolf, se introdujo una nueva extensión
NavBackStackEntry#provideToCompositionLocals
que proporciona laNavBackStackEntry
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)
Navigation Compose versión 1.0.0
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 unModifier
, 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 unOnBackPressedDispatcherOwner
, por ejemplo, cuando se obtiene una vista previa deNavHost
. (I7d8b4) - Navigation Compose ahora depende de Navigation
2.3.5
y soluciona un problema cuando se usaBackHandler
dentro de un destino deNavHost
. (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 objetoViewModelStoreOwner
anulable para determinar mejor si unViewModelStoreOwner
está disponible en la composición actual. Las API que requieren unViewModelStoreOwner
, comoviewModel()
yNavHost
, aún generan una excepción si no se establece unViewModelStoreOwner
. (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 laLocalSavedStateRegistryOwner
de CompositionLocal con losNavBackStackEntry
de destino, lo que garantiza que cualquier estado que se guarde directamente en losSavedStateRegistry
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
- Navigation Compose ahora depende de Lifecycle ViewModel Compose 1.0.0-alpha01 para brindar compatibilidad con
viewModel()
en los destinoscomposable
. (I7a374) NavHost
ahora usa el nuevoLocalOnBackPressedDispatcherOwner
de Activity-Compose 1.3.0-alpha01 para obtener elOnBackPressedDispatcher
configurado enNavController
. (I65b12)
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)
enNavController
que muestra elNavBackStackEntry
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()
ynavigateUp()
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()
ycurrentBackStackEntryAsState()
para permitir elevar el estado y conectar el objetoNavController
con elementos que admiten composición fuera deNavHost
(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
oUri
, ahora puedes acceder aUri
, acción y tipo de MIME en el destino resultante mediante la obtención del intent de los argumentos a través deKEY_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 elNavBackStackEntry
ya que ahora el LifecycleOwner intercepta correctamente después de que el ciclo de vida de la actividad seaSTOPPED
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 conwww.example.com
ywww.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 prefijo0x
. (#127, b/179166693) - El
android:defaultValue
para un argumento conapp:argType="float"
ahora admite valores predeterminados de número entero, lo que te permite usarandroid:defaultValue="0"
en lugar de usar0.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
osetLifecycleOwner
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 deReferenceType
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 eldefaultValue
de un argumento conapp: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 queLifecycle
se mueva aCREATED
. (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 unaResourceNotFoundException
. (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>
cononNavDestinationSelected
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 usabalaunchSingleTop
. (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 unpopUpTo
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 conFragmentScenario
yNavigation.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 queNavigationUI
pueda abrir el panel lateral incluso cuando se usanLOCK_MODE_LOCKED_CLOSED
oLOCK_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
ynavigation-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 objetoTestNavHostController
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 elementoSavedStateHandle
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
paraOpenable
: Se reemplazaron todos los usos deDrawerLayout
enNavigationUI
con la interfazOpenable
más genérica, que se agregó en CustomView1.1.0
y queDrawerLayout
implementó en DrawerLayout1.1.0
. - Compatibilidad con acciones y tipos de MIME en vínculos directos: Los vínculos directos se expandieron para admitir
app:action
yapp:mimeType
, además del elementoapp:uri
disponible anteriormente.NavController
ahora admite la navegación mediante cualquier combinación de estos campos a través de la nueva clase deNavDeepLinkRequest
. 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 consingleTop
. (b/158006669) - Todas las excepciones
destination is unknown
que arrojadNavController
ahora tienen información de depuración adicional para ayudar a determinar el estado deNavController
. (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 elementoNavBackStackEntry
no se actualizaba correctamente después del cierre del proceso. (b/155218371) - Las instancias
OnDestinationChangedListener
registradas antes de llamar al objetosetGraph()
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 elementoNavBackStackEntry
, y los argumentos actualizados se envían a todas las instanciasOnDestinationChangeListener
. (b/156545508)
Actualizaciones de dependencias
- El artefacto
NavigationUI
ahora depende de los objetos CustomView1.1.0-rc01
y DrawerLayout1.1.0-rc01
. (aosp/1309696)
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
yapp:mimeType
, además del elementoapp:uri
disponible anteriormente. NavController ahora admite la navegación mediante cualquier combinación de estos campos a través de la nueva clase deNavDeepLinkRequest
. (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 especificarapp:graphPackage
y se utilizará una configuración predeterminada en la que se agrega el sufijomoduleName
aapplicationId
después de un punto. Si necesitas personalizar tugraphPackage
, 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 deNavHostFragment
en tu Activity (b/147378752)
Actualizaciones de dependencias
- Ahora Navigation depende de Fragment
1.2.4
. (aosp/1277325) - Dynamic Navigation ahora depende de Play Core
1.7.2
. (aosp/1282257)
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 unContext
en su constructor en lugar de unaActivity
. (aosp/1250252)
Correcciones de errores
NavigationUI
ya no ignora las etiquetas vacías (es decir, un destino conandroid: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 interfazOpenable
que se introdujo en CustomView1.1.0-alpha02
(queDrawerLayout
implementa a partir de DrawerLayout1.1.0-alpha04
), lo que te permite usar implementaciones personalizadas deOpenable
conNavigationUI
. (b/129030452)
Correcciones de errores
- Las reglas de ProGuard de
navigation-common-ktx
ahora solo mantienen correctamente las clases deNavArgs
que se utilizan en lugar de todas las instancias deNavArgs
. (b/150213558)
Cambios de dependencia
- Navigation revirtió su dependencia de Core
1.2.0
y ahora depende de Core1.1.0
para evitar que los desarrolladores tengan que trasladarse a una dependencia más nueva cuando Navigation no depende de API nuevas en Core1.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 unSavedStateHandle
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()
ygetPreviousBackStackEntry()
a fin de facilitar la recuperación de unaNavBackStackEntry
para los destinos actuales y anteriores. (b/79672220)
Correcciones de errores
navigateUp()
ahora pasaKEY_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
- Navigation ahora depende de Core
1.2.0
.
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 claseTestNavHostController
. Esta clase ofrece una alternativa al uso de unNavController
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 denavigation-ui
paraDrawerArrowDrawable
a fin de garantizar que no se requieraandroid.enableJetifier=true
. (b/147610424) - A partir de Navigation
2.2.1
: El módulonavigation-common-ktx
ahora tiene un nombre de paquete de manifiesto único en lugar de compartir el mismo nombre de paquete de manifiesto quenavigation-runtime-ktx
(aosp/1141947)
Actualizaciones de dependencias
- A partir de Navigation
2.2.1
: Navigation2.2.1
ahora depende de Lifecycle ViewModel SavedState2.2.0
y Fragment1.2.1
.
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 deNavHostFragment
en tu Activity. (b/147378752) NavigationUI
ya no ignora las etiquetas vacías (es decir, un destino conandroid: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 deNavArgs
que se utilizan en lugar de todas las instancias deNavArgs
. Se lanzó anteriormente en Navigation 2.3.0-alpha03. (b/150213558
Actualizaciones de dependencias
- Ahora Navigation depende de Fragment
1.2.4
. (aosp/1277325)
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
paraDrawerArrowDrawable
a fin de garantizar que no se requieraandroid.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 quenavigation-runtime-ktx
. (aosp/1141947)
Actualizaciones de dependencias
- Navigation
2.2.1
ahora depende de Lifecycle ViewModel SavedState2.2.0
y Fragment1.2.1
.
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 objetoNavBackStackEntry
que se muestra proporciona un elementoLifecycleOwner
controlado por Navigation,ViewModelStoreOwner
(el mismo que se muestra paraNavController.getViewModelStoreOwner()
) ySavedStateRegistryOwner
, 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 usanby navGraphViewModels()
o el constructorViewModelProvider
con unViewModelStoreOwner
que muestranNavController.getBackStackEntry()
oNavController.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 usaFragmentContainerView
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 Fragment1.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 denull
. (b/141613546). - Ahora,
NavHostFragment
restablece correctamente el gráfico después de un cambio de configuración cuando se usa conFragmentContainerView
. (b/143752103).
Cambios de dependencia
- Navigation ahora depende de Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
, and Fragment1.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 anulantoString()
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()
enActivity
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 asetGraph
ahora genera un objetoIllegalStateException
. Esto siempre debe establecerlo el objetoNavHost
como parte de la configuración inicial para garantizar que todas las instancias deNavBackStackEntry
tengan un almacenamiento coherente para las instancias deViewModel
. (aosp/1111821).
Correcciones de errores
- Se corrigió un error de tipo
ConcurrentModificationException
cuando se usaban instancias deViewModel
asociadas a varias instancias deViewModelStore
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 objetoNavBackStackEntry
que se muestra proporciona un elementoLifecycleOwner
controlado por Navigation,ViewModelStoreOwner
(el mismo que se muestra paraNavController.getViewModelStoreOwner()
) ySavedStateRegistryOwner
, 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
aViewPager2
generaba un error relacionado con unaIllegalArgumentException
. (b/133640271) NavInflater
ahora evita llamar agetResourceName()
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 usaby navGraphViewModels()
o el constructorViewModelProvider
con un objetoViewModelStoreOwner
mostrado porNavController.getViewModelStoreOwner()
. (b/135716331).
Cambios en la API
- Desde Navigation
2.1.0-rc01
: se quitó la APIgetViewModelStore()
obsoleta enNavController
que se introdujo en2.1.0-alpha02
. (aosp/1091021).
Correcciones de errores
NavHostFragment
ahora usaFragmentContainerView
, 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 degetViewModelStoreOwner()
agregada aNavController
. 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 objetoDialogFragment
cuando ejecutesnavigate
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 objetoUri
, 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 objetoNavHost
personalizado, lo que permite que las implementaciones conecten sus elementosNavController
a losLifecycleOwner
,OnBackPressedDispatcher
yViewModelStore
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 enNavController
que se introdujo en2.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 usasetupWithNavController()
conToolbar
oCollapsingToolbarLayout
. (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 artefactonavigation-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()
enNavController
para priorizar el nuevo métodogetViewModelStoreOwner()
que muestra un objetoViewModelStoreOwner
. (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 destinosFloatingWindow
. (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 deNavController
:NavHostController
. (aosp/966091) - Se reemplazó el método
NavController
setHostOnBackPressedDispatcherOwner()
por el métodosetOnBackPressedDispatcher()
deNavHostController
y ahora requiere que llames asetLifecycleOwner()
antes de llamar al método (aosp/965409). NavHostController
ahora contiene un métodoenableOnBackPressed(boolean)
que reemplaza la claseNavHostOnBackPressedManager
que anteriormente mostrabasetHostOnBackPressedDispatcherOwner()
. (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 elementoapp:defaultNavHost
cuando se interceptan los eventos del botón Atrás del sistema, lo que corrige una regresión en Navigation2.1.0-alpha03
. b/132077777DialogFragmentNavigator
ahora administra correctamente las operacionespopBackStack()
ynavigateUp()
. 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 objetoDialogFragment
cuando uses un elementonavigate
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 deNavDirections
, ahora puedes navegar mediante un elementoUri
, 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()
deNavHostFragment
y se movió su funcionalidad al nuevo métodoonCreateNavController()
a fin de dejar más claro que este es el punto de entrada correcto para agregar navegadores personalizados cuando se subclasificaNavHostFragment
. b/122802849 - Se agregó un método
hasDeepLink()
aNavDestination
para permitirte verificar si un elementoUri
determinado se puede administrar por ese destino o, en el caso de unNavGraph
, 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 conOnBackPressedDispatcher
, 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 elementoapp:argType
sin especificar ahora se infiere correctamente como un argumento destring
. 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 degetViewModelStore()
agregada aNavController
. b/111614463.
Cambios en la API
- Ahora puedes agregar un elemento
app:targetPackage
a un destino<activity>
para limitar el nombre del paquete coincidente. Admiteapp: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
yandroidx.fragment:fragment:1.1.0-alpha05
. Esta versión también quita la dependencia deandroidx.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 usaFragmentFactory
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 usaandroid: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 sinFLAG_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
yfun
en el nombre del paquete asociado con la claseR
. 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
comoandroid:defaultValue
para los argumentosreference
. 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()
ynavigateUp
ahora muestran correctamentefalse
cuando muestran el último destino de la pila de actividades, lo que corrige una regresión que se introdujo en1.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 deNavigator
o en argumentos enviados a unNavDestination
. 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 unapp: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 deNavController
, lo que provocaba unaIllegalStateException
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 claseNavArgs
generada por Safe Args en un objetoActivity
oFragment
. 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 complementoandroidx.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 unNavController
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 deNavHostFragment
anidados o múltiples. b/121340440
Cambios rotundos
- El método
NavOptions.applyPopAnimationsToPendingTransition()
que permite aplicar animaciones emergentes a una actividad se movió aActivityNavigator
. 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 losgetArguments()
deNavDirections
ahora se marca como@NonNull
en lugar de@Nullable
. b/123243957.
Correcciones de errores
NavDeepLinkBuilder
ahora procesa correctamente variosPendingIntent
simultáneos en el mismo destino mediante el uso de los argumentos que pasas para determinar la unicidad. b/120042732NavController
ahora procesa correctamente las operaciones depopBackStack()
cuando se usa unNavHostFragment
anidado u otros fragmentos secundarios con una pila de actividades. b/122770335NavigationUI
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 dehashCode()
iguales cuandoequals()
muestra el valor "verdadero". b/123043662 FragmentNavigator
ahora arroja un mensaje de error más claro si intentas implementarFragmentTransactions
personalizadas en elFragmentManager
deNavHostFragment
. Siempre debes usargetChildFragmentManager()
. 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
conmenuCategory="secondary"
ya no mostrarán la pila de actividades cuando se usen con los métodosNavigationUI
. b/120104424 AppBarConfiguration
ahora te permite establecer una instancia de resguardo deOnNavigateUpListener
a la que se puede llamar cuandonavController.navigateUp()
muestrafalse
. (b/79993862, b/120690961)
Cambios rotundos
- Cuando usas un objeto
<argument>
con unaargType="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étodossetup
. AgregamenuCategory="secondary"
a tuMenuItem
para evitar que se muestre la pila de actividades. aosp/852869 - Los métodos
fromBundle()
de las clases deArgs
generadas ahora toman un valor deBundle
no nulo en lugar de un valor deBundle
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 objetoandroid: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
porOnDestinationChangedListener
. b/118670572 - Ahora
OnDestinationChangedListener
también pasa elBundle
de los argumentos. aosp/837142 - Se quitaron los atributos
app:clearTask
yapp:launchDocument
, así como sus métodos asociados. Usaapp: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ónBuilder
y agrega la posibilidad de configurar cualquier marca deIntent.FLAG_ACTIVITY_
. aosp/828140 - Se cambió el nombre de
NavController.onHandleDeepLink
porhandleDeepLink
. aosp/836063 - Muchas clases y métodos no destinados para subclases, como
NavOptions
,NavInflater
,NavDeepLinkBuilder
yAppBarConfiguration
, quedaron comofinal
. 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 aFragmentFactory
. b/119054429 - El constructor de
NavGraphNavigator
ya no usa unContext
. aosp/835340 - Ahora, NavigatorProvider es una clase en lugar de una interfaz. No cambió la funcionalidad del
NavigatorProvider
que muestragetNavigatorProvider()
. aosp/830660 - Se quitó
NavDestination.navigate()
. En su lugar, llama anavigate()
en elNavigator
. aosp/830663 - Se realizó una refactorización importante de
Navigator
: se eliminó la necesidad de contar conOnNavigatorNavigatedListener
y, en su lugar,navigate
muestra elNavDestination
al que se navegó. - Las instancias de
Navigator
ya no pueden enviar eventos emergentes alNavController
. Considera usar unaOnBackPressedCallback
para interceptar las instancias en las que se presione el botón Atrás y llamar anavController.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 atoString()
. 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
- Una nueva clase de AppBarConfiguration te permite personalizar los destinos considerados de primer nivel. Consulta la documentación actualizada para obtener más información. b/117333663
- Ahora puedes transferir argumentos al destino de inicio de tu gráfico. b/110300470
- Los vínculos directos ahora admiten esquemas personalizados con puntos, guiones y signos más. b/112806402
Cambios rotundos
- Se integró el módulo
navigation-testing-ktx
anavigation-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
- Ahora se admiten las transiciones de elementos compartidos para los destinos de fragmentos y actividades b/79665225. Para obtener más información, consulta Cómo implementar navegaciones con el componente de arquitectura de Navigation.
- Ahora, si seleccionas un elemento en
NavigationView
, se cerrará cualquier hoja inferior con contenido. b/112158843
Cambios en la API
- Cambio rotundo: el método
navigate()
de Navigator ahora toma un parámetroNavigator.Extras
. - Ahora el método
getGraph()
de NavController esNonNull
. 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ó porapp: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á ensetDemoControllerIndex
. b/79995048 - P. ej.,
action_show_settings
se convertirá enactionShowSettings
. b/79642240
- P. ej.,
- 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()
yhashCode()
. 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
usasetReorderingAllowed(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/79632233Ahora 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/79656847Se corrigió un error
StackOverflowError
que se generaba cuando se usaba NavDeepLinkBuilder. b/109653065Se corrigió un error
IllegalArgumentException
que se generaba cuando se navegaba hacia atrás en un gráfico anidado. b/80453447Se corrigió un error relacionado con la superposición de Fragment que se generaba cuando se usaba
launchSingleTop
. b/79407969Ahora 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 enNavOptions
. b/80338878Se dio de baja el atributo
launchDocument
para acciones y la API asociada enNavOptions
. 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
.