导航
最新更新 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024年11月13日 | 2.8.4 | - | - | 2.9.0-alpha03 |
声明依赖项
要添加对 Navigation 的依赖项,您必须将 Google Maven 存储库添加到您的项目。阅读Google 的 Maven 存储库以了解更多信息。
在应用或模块的build.gradle
文件中添加所需构件的依赖项
Groovy
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" }
Kotlin
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") }
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") }
您必须在gradle.properties
文件中包含android.useAndroidX=true
,详情请参阅迁移到 AndroidX。
有关使用 Kotlin 扩展的信息,请参阅ktx 文档。
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告知我们。在创建新问题之前,请查看此库中现有问题。您可以点击星标按钮为现有问题投票。
有关更多信息,请参阅问题跟踪器文档。
2.9 版
2.9.0-alpha03 版
2024年11月13日
androidx.navigation:navigation-*:2.9.0-alpha03
已发布。2.9.0-alpha03 版包含这些提交。
新功能
- 导航类型安全现在支持将值类作为路由或路由的参数类型。(I9344a,b/374347483)
错误修复
- 修复了当附加到
NavBackStackEntry
的LifecycleObserver
在宿主LifecycleOwner
(例如包含的 Activity 或 Fragment)更改其生命周期状态时触发对回退栈的更改时可能发生的ConcurrentModificationException
。(Ia9494)
2.9.0-alpha02 版
2024 年 10 月 30 日
androidx.navigation:navigation-*:2.9.0-alpha02
已发布。2.9.0-alpha02 版包含这些提交。
外部贡献
- 新的通用
NavController.handleDeepLink(request: NavDeepLinkRequest)
方法。感谢 Konstantin Tskhovrebov!(I3e228)
2.9.0-alpha01 版
2024 年 10 月 16 日
androidx.navigation:navigation-*:2.9.0-alpha01
已发布。2.9.0-alpha01 版包含这些提交。
新功能
- 自定义导航器现在可以将其目标标记为实现
SupportingPane
接口,这表示这些目标将与其他目标一起显示。例如,通过使用此接口,可以同时RESUMED
多个目标。(Id5559) - 来自Navigation
2.8.3
:为navigation-common
、navigation-runtime
和navigation-compose
模块添加了新的 lint 检查,以帮助识别任何未用@Serializable
正确注释的类型安全路由。此检查适用于所有NavGraphBuilder
和NavDeepLinkBuilder
扩展函数。(I4a259,I95402,Ie601a,Id8c6e,I28bda,b/362725816) - 来自Navigation
2.8.3
:为navigation-common
、navigation-runtime
和navigation-compose
模块添加了新的 lint 检查,以帮助识别任何带有未用@Keep
正确注释的枚举参数的类型安全路由。此检查适用于所有NavGraphBuilder
和NavDeepLinkBuilder
扩展函数。(I4a259,I95402,Ie601a,Id8c6e,I2b46f,b/358687142)
行为更改
- 尝试使用先前已
DESTROYED
的NavController
现在将导致IllegalStateException
。(I520da,b/369616172)
错误修复
- 将枚举类未找到异常更新为建议在最小化构建中删除枚举类时使用
@Keep
注释。(I90e79,b/358137294)
已知问题
- 在
Navigation 2.8.*
中添加的新 lint 规则存在一个问题,当尝试使用 Android Gradle Plugin 8.4+ 运行 lint 时,该规则会导致Obsolete custom lint check
错误。(b/368070326,b/371463741)
2.8 版
2.8.4 版
2024年11月13日
androidx.navigation:navigation-*:2.8.4
已发布。2.8.4 版包含这些提交。
新功能
- 来自Navigation
2.9.0-alpha03
:导航类型安全现在支持值类作为路由或路由的参数类型(I9344a,b/374347483)
错误修复
- 来自Navigation
2.9.0-alpha01
:尝试使用先前已DESTROYED
的NavController
现在将导致IllegalStateException
。(I520da,b/369616172)
2.8.3 版
2024 年 10 月 16 日
androidx.navigation:navigation-*:2.8.3
已发布。2.8.3 版包含这些提交。
新功能
- 为
navigation-common
、navigation-runtime
和navigation-compose
模块添加了新的 lint 检查,以帮助识别任何未用@Serializable
正确注释的类型安全路由。此检查适用于所有NavGraphBuilder
和NavDeepLinkBuilder
扩展函数。(I4a259,I95402,Ie601a,Id8c6e,I28bda,b/362725816) - 为
navigation-common
、navigation-runtime
和navigation-compose
模块添加了新的 lint 检查,以帮助识别任何带有未用@Keep
正确注释的枚举参数的类型安全路由。此检查适用于所有NavGraphBuilder
和NavDeepLinkBuilder
扩展函数。(I4a259,I95402,Ie601a,Id8c6e,I2b46f,b/358687142)
错误修复
- 修复了在
Navigation 2.8.*
中添加的新 lint 规则会导致Obsolete custom lint check
错误的问题,该问题发生在尝试使用 Android Gradle Plugin 8.4+ 运行 lint 时。(I1be3d,b/368070326,b/371463741)
已知问题
- 当尝试使用 Lint 16 (AGP 8.7) 或更高版本运行 lint 时,Navigation lint 将会抛出 Obsolete custom lint check 错误。(b/371926651)
2.8.2 版
2024 年 10 月 2 日
androidx.navigation:navigation-*:2.8.2
已发布。2.8.2 版包含这些提交。
新功能
- 导航类型安全现在支持包含
Double
、Double?
、DoubleArray
、DoubleArray?
、List<Double>
和List<Double>?
的可序列化类,无需任何自定义NavType
。(I570eb,Ibc4c0,I37461,I5bed4,b/359245753)
错误修复
- 改进了导航无法将路由的参数映射到
NavType
时的错误消息,新的错误消息将包含参数名称、参数完全限定名和路由的完全限定名。(Id8416,b/346264232)
2.8.1 版
2024 年 9 月 18 日
androidx.navigation:navigation-*:2.8.1
已发布。2.8.1 版包含这些提交。
新功能
- 添加了一个新的 lint 规则,以确保在尝试使用类型安全 API
popBackStack
时使用带具现化类类型的popBackStack
函数。(Ief161,b/358095343)
错误修复
- Navigation 现在要求传递给
NavGraph
的startDestination
的路由包含所有必需参数的值,其中包括不可为空且没有默认值的那些参数。(I18e74,b/362594265) - Navigation 安全参数已添加对不可为空字符串的支持,以便按原样解析“null”值并将其存储到 bundle 中。这与现有的行为有所不同,在现有的行为中,“null”值被解析为 null 对象。此更改仅适用于不可为空的字符串类型。可为空的字符串保持不变。(I08b4a,b/348936238)
NavDestination
现在只能通过显式添加到目标的深层链接进行深层链接。这也意味着您只能使用采用字符串路由的 navigate 函数重载来导航到目标的路由。这修复了一个漏洞,该漏洞使得可以深层链接到潜在受保护的目标。(Ie30e6)
依赖项更新
- Navigation Safe Args 现在依赖于 Kotlin 1.9.24,而不是 Kotlin 2.X,确保开发人员不会被迫更新。(a4129a)
- 导航组合现在依赖于 Compose
1.7.2
。
2.8.0版本
2024年9月4日
androidx.navigation:navigation-*:2.8.0
已发布。2.8.0 版本包含 这些提交。
自 2.7.0 版本以来的重要更改
导航 Kotlin DSL 类型安全
- 导航现在为 Kotlin DSL(由导航组合使用)提供类型安全,使用 Kotlin 序列化允许您通过类型安全的对象和数据类在导航图中定义目标。
// 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)
}
}
请参阅 导航组合满足类型安全博客文章,了解更多信息。
导航组合预测返回
- 导航组合现在通过 compose-animation 中新的
SeekableTransitionState
API 提供对预测应用内返回的支持。这允许您使用返回手势查看上一个目标以及您的自定义过渡,然后决定是通过完成的手势提交事务还是取消。
导航片段组合
- 添加了一个新的
navigation-fragment-compose
构件,其中包含ComposableNavHostFragment
,它是NavHostFragment
的替代方案,允许您将可组合的目标添加到导航 XML 文件中。每个composable
目标必须表示为顶级、无参数的@Composable
方法,其完全限定名称用作每个目标上的android:name
属性。导航到这些目标之一时,将创建一个包含片段以显示可组合的内容。
// 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" />
其他更改
- 导航组合现在依赖于 Compose 1.7.0。
- 导航现在提供了一个新的
CollectionNavType<T>
类,它是NavType<T>
的子类,用于基于集合的参数,例如列表、数组、映射。所有默认的NavType
数组(IntArrayType
、LongArrayType
、FloatArrayType
、BoolArrayType
和StringArrayType
)现在都继承自这个新类。 NavType
现在内置支持 Int、String、Boolean、Float 和 Long 的列表。
2.8.0-rc01 版本
2024年8月21日
androidx.navigation:navigation-*:2.8.0-rc01
已发布。2.8.0-rc01 版本包含 这些提交。
错误修复
- 修复了将顶级枚举类作为类型安全参数传递时导航崩溃的问题。(I0ba76,b/358137294)
- 导航 2.8 现在可以与 SDK 34 正确配合使用,并且在 2.9 版本以及其他 AndroidX 库一起发布之前不会切换到 SDK 35。(b/358798728)
2.8.0-beta07 版本
2024年8月7日
androidx.navigation:navigation-*:2.8.0-beta07
已发布。2.8.0-beta07 版本包含 这些提交。
已知问题
- 由于 b/358137294,开箱即用仅支持嵌套在另一个类中的枚举。顶级枚举将在下一个版本中受支持。
错误修复
- 导航到重复或共享的目标时,导航将优先从图中的当前位置转到最接近匹配的目标。(Ic89a4,b/352006850)
- 安全参数中的导航现在添加了一个新的
NavType.EnumType
。这意味着Enum
类型不再需要自定义NavType
。请注意,Enum
的SerialName
必须是默认的完全限定名称。(I66d22,b/346475493) - 安全参数中的导航添加了对可空参数类型的内置支持,包括
Int?
、Long?
、Float?
、Boolean?
和Enum<*>?
。(I32d13,I1c580,Ifba66,I978b0,Ide076 ,b/351994237) NavGraph
的startDestination
现在如果传递给NavGraph
的startDestination
路由与startDestination.route
完全相等,则将使用默认参数值。(I13762,b/354046047)
2.8.0-beta06 版本
2024年7月24日
androidx.navigation:navigation-*:2.8.0-beta06
已发布。2.8.0-beta06 版本包含 这些提交。
错误修复
- 修复了
WrongStartDestinationType
lint 检查未检查传入类类型的伴生对象的问题,导致 lint 无法检测到错误。(I92b09)
2.8.0-beta05 版本
2024年7月10日
androidx.navigation:navigation-*:2.8.0-beta05
已发布。2.8.0-beta05 版本包含 这些提交。
错误修复
- 修复了嵌套
NavGraphs
共享相同的startDestination
路由时singleTop
导航崩溃的问题。(I17b94,b/294408596)
2.8.0-beta04 版本
2024年6月26日
androidx.navigation:navigation-*:2.8.0-beta04
已发布。2.8.0-beta04 版本包含 这些提交。
错误修复
- 导航现在支持在路径参数中使用空字符串进行导航。(Ic5dbd,b/339481310)
- 改进了通过
@Serializable(with =...)
直接在类字段上声明的自定义序列化程序的错误消息,以阐明此功能当前不受支持。(I052b0,b/341319151) SavedStateHandleFactory
测试 API 现在可以在非 Android 测试中使用,但需要 Robolectric 来支持使用 Bundles 进行参数解析。(I76cdc,b/340966212)- 修复了在使用 Compose 中的类型安全导航时,进程死亡后恢复应用程序时恢复状态导致的崩溃。(Ia8f38,b/341801005)
- 修复了导航组合中的一个问题,即取消预测返回手势后,用户返回的
NavBackStackEntry
永远不会返回到RESUMED
生命周期状态。这也确保返回的目标正确地动画返回,而不是在轻弹后卡到位。(I97a0c,b/346608857) - 使用导航组合进行预测返回时,即将弹出目标现在将具有正确的 z 顺序,可在传入目标上方正确动画。(I2077b,b/345993681)
2.8.0-beta03 版本
2024年6月12日
androidx.navigation:navigation-*:2.8.0-beta03
已发布。2.8.0-beta03 版本包含 这些提交。
API 变更
CollectionNavType
有一个新的抽象emptyCollection()
方法。重写此方法以处理作为参数传入的空集合。(Ie4d84,b/341723133)
错误修复
- 添加了关于
NavType.serializeAsValue
和serializeAsValues
的文档,以突出显示最终输出应为 Uri 编码。(Ida6bd,b/344943214) - 修复了使用空
CollectionNavType
参数调用toRoute<T>
时发生的崩溃。使用空CollectionNavType
进行导航时,输出参数将是您在可序列化类上声明的默认值,或者如果没有默认值,则为emptyCollection()
的返回值。(I84158,Id630f,b/342672856)
2.8.0-beta02 版本
2024年5月29日
androidx.navigation:navigation-*:2.8.0-beta02
已发布。2.8.0-beta02 版本包含 这些提交。
错误修复
- 修复了使用可空自定义
NavType
时NavBackStackEntry.toRoute
导致的ClassCastException
崩溃。(I1c29b,b/342239473) - 修复了尝试恢复当前目标无法通过 ID 访问的返回堆栈条目时导致的导航返回堆栈状态恢复问题。由于路由由 ID 支持,因此使用路由构建的目标也受到影响。这也修复了调用
clearBackStack()
导致的崩溃,该崩溃具有相同的底层问题。(I423c3,b/339908057)
2.8.0-beta01 版本
2024年5月14日
androidx.navigation:navigation-*:2.8.0-beta01
已发布。2.8.0-beta01 版本包含 这些提交。
API 变更
SavedStateHandle.toRoute()
现在采用typeMap
参数用于自定义参数类型。(Ie39fb,b/339026523)- 向
navigation-testing
添加了一个测试 API,用于从 Kotlin 可序列化对象创建SavedStateHandle
。(Id4867,b/339080702)
错误修复
- 已添加导航 Kotlin DSL 函数的缺失参数文档。(I26a36)
2.8.0-alpha08 版本
2024年5月1日
已发布 androidx.navigation:navigation-*:2.8.0-alpha08
。2.8.0-alpha08 版本包含这些提交。
Navigation Compose 中的安全参数 (Safe Args)
- 基于 Kotlin 序列化,针对Navigation Compose 和 Navigation Kotlin DSL 用户的编译时类型安全性的工作已完成,先前实验性的 API 现在已稳定。(Iea94d,I0eb0d,I873b7,I3a64b,I6c3a2,I11f0b,Ic3032,I8d394,I95710,Ice060,Id0e55,I45f8b,Idcdaf,If5380,I08b23,Ia5c59,b/188693139)
此功能使用Kotlin 序列化,允许您通过类型安全的对象和数据类在导航图中定义目标。
// 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)
}
}
请参阅 导航组合满足类型安全博客文章,了解更多信息。
新功能
navigation-fragment-compose
构件现在提供了一个LocalFragment
组合局部变量,用于ComposableFragment
中的可组合方法。(If35e5)NavType
现在内置支持 Int、String、Boolean、Float 和 Long 的列表。(I4b6dd,Ia914c,b/188693139)
2.8.0-alpha07 版本
2024年4月17日
已发布 androidx.navigation:navigation-*:2.8.0-alpha07
。2.8.0-alpha07 版本包含这些提交。
新功能
添加了一个新的
navigation-fragment-compose
构件,其中包含一个ComposableNavHostFragment
,它可以替代NavHostFragment
,允许您将composable
目标添加到您的 Navigation XML 文件中。每个composable
目标必须表示为顶级、无参数的@Composable
方法,其全限定名用作每个目标上的android:name
属性。导航到这些目标之一时,将创建一个包含片段来显示可组合内容。(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" />
API 变更
- 继续支持使用基于 Kotlin 序列化的方式在 Navigation Compose 中使用安全参数。这些 API *尚未完成*,并标有
ExperimentalSafeArgsApi
注解。在未来的版本中完成整个 API 表面后,将删除此注释。(Iefd95,I409c8,I5b5ac,I7e753,I960f8,I3eabd,I8ed5a,Ied2c9,I9b73c,I554db,Ib3aba,Ia668d,b/188693139)
2.8.0-alpha06 版本
2024年4月3日
已发布 androidx.navigation:navigation-*:2.8.0-alpha06
。2.8.0-alpha06 版本包含这些提交。
API 变更
- 已开始使用基于 Kotlin 序列化的方式在 Navigation Compose 中支持安全参数。这些 API **尚未完成**,并标有
ExperimentalSafeArgsApi
注解。在未来的版本中完成整个 API 表面后,将删除此注释。(I644e7,I98896,I2a1c5,I43a51,I836a1,Ic5eec,I39407,I24e41,If9e14,Ibb13e,If44d3,Icb70f,I8972f,I1d432,Icf32b,I20a14,I262aa,I7de99,I35990,I1033d,b/188693139)
错误修复
NavHost
现在使用Alignment.TopStart
作为默认的 contentAlignment 参数。这使其与AnimatedContent
的默认值一致,并修复了从中心过渡意外缩放的一些实例。(I09e72,b/330111602)- 使用 Navigation Compose 时,在轻弹预测性后退手势时,
NavHost
现在将正确完成自定义过渡,而不是立即结束。(I99017,b/327292110)
2.8.0-alpha05 版本
2024年3月20日
已发布 androidx.navigation:navigation-*:2.8.0-alpha05
。2.8.0-alpha05 版本包含这些提交。
新功能
- 您现在可以直接在
startDestination
路由中将参数传递给NavGraph
的startDestination
,而无需依赖defaultValue
。这也适用于嵌套的NavGraph
startDestinations
。(I0e0b5,b/109505019,b/188693139)
API 变更
- 添加了新的抽象
CollectionNavType<T>
类,它是NavType<T>
的子类,用于基于集合的参数,例如列表、数组、映射。(Ic6d63,b/188693139) - 所有默认的
NavType
数组(IntArrayType
、LongArrayType
、FloatArrayType
、BoolArrayType
和StringArrayType
)现在都是CollectionNavType
类型。(Idcf79,b/188693139) NavType
现在提供了一个新的开放式valueEquals
API,用于确定相同类型的两个值是否相等。(I6cb97,b/327229511)
错误修复
- 深度链接中的查询参数现在允许使用大括号括起来的 参数名称(例如
{argName}
) 作为基于字符串的NavTypes
的有效值。这修复了此类值对于所有类型都被视为无效(或值不存在)的问题。(I18302,b/327274038) - 现在,支持路由的
NavController
函数(例如navigate
或popBackStack
)可以正确匹配填充了数组NavTypes
参数的路由。(Iea805,b/327229511)
2.8.0-alpha04 版本
2024年3月6日
已发布 androidx.navigation:navigation-*:2.8.0-alpha04
。2.8.0-alpha04 版本包含这些提交。
新功能
- 您现在可以通过将它们定义为
composable
和/或navigation
函数初始化的一部分,来指定 Navigation Compose 中过渡的SizeTranform
。(I91062,b/296912651)
错误修复
- 修复了在 Compose Navigation 中使用系统返回键(无手势操作)时,
NavHost
无法正确显示过渡动画的问题。(Iceeae,b/325998468)
版本 2.8.0-alpha03
2024年2月21日
已发布 androidx.navigation:navigation-*:2.8.0-alpha03
。版本 2.8.0-alpha03 包含这些提交。
API 变更
NavBackStackEntry.savedStateHandle
现在标记为@MainThread
,因为它使用了需要在主线程上运行的代码。(Ibb988,b/299523245)
错误修复
- 修复了 Navigation 中导致
NavGraph
ViewModel 过早DESTROYED
的问题,因为关联项的ViewModel
不是保存状态的一部分。(Ib6bb7,b/317581849)
依赖项更新
- Navigation Compose 现在依赖于 Compose 1.7.0-alpha03。
版本 2.8.0-alpha02
2024年2月7日
已发布 androidx.navigation:navigation-*:2.8.0-alpha02
。版本 2.8.0-alpha02 包含这些提交。
新功能
- Navigation Compose 现在通过 compose-animation 中新的
SeekableTransitionState
API 提供对预测性应用内返回的支持。这允许您在使用返回手势查看上一个目的地及其自定义过渡后,决定是通过完成的手势提交事务还是取消事务。(I8b8e9)
版本 2.8.0-alpha01
2024年1月24日
已发布 androidx.navigation:navigation-*:2.8.0-alpha01
。版本 2.8.0-alpha01 包含这些提交。
错误修复
- 修复了
BackStackState
泄漏问题,其中在目的地多次调用saveState
会导致保存多个状态,但只能恢复第一个状态。(I598b0,b/309559751) - 修复了使用
NavigationUI
辅助函数填充应用栏标题时,非字符串参数无法正确显示的问题。(#636,b/316676794)
依赖项更新
- Navigation Compose 现在依赖于 Compose
1.7.0-alpha01
,修复了可能导致意外缩放动画的问题。(b/297258205)
外部贡献
- 感谢 SimonMarquis 修复了使用
NavigationUI
辅助函数填充应用栏标题时,非字符串参数的显示问题。
版本 2.7.7
版本 2.7.7
2024年2月7日
已发布 androidx.navigation:navigation-*:2.7.7
。版本 2.7.7 包含这些提交。
错误修复
- 从 Navigation
2.8.0-alpha01
反向移植:修复了BackStackState
泄漏问题,其中在单个NavBackStackEntry
上多次调用saveState()
会导致保存多个状态,但只能恢复第一个保存的状态。(I598b0,b/309559751) - 从 Navigation
2.8.0-alpha01
反向移植:修复了使用NavigationUI
辅助函数填充应用栏标题时,非字符串参数无法正确显示的问题。(#636,b/316676794)
外部贡献
- 感谢 SimonMarquis 修复了使用
NavigationUI
辅助函数填充应用栏标题时,非字符串参数的显示问题。
版本 2.7.6
版本 2.7.6
2023年12月13日
已发布 androidx.navigation:navigation-*:2.7.6
。版本 2.7.6 包含这些提交。
错误修复
NavGraph
的equals()
函数现在会正确考虑其他图形的节点,而不仅仅是调用图形的节点。这将确保具有不同 ID 节点的图形不再被认为是相等的(I401cb,b/311414915)
版本 2.7.5
版本 2.7.5
2023年11月1日
已发布 androidx.navigation:navigation-*:2.7.5
。版本 2.7.5 包含这些提交。
性能改进
- 极大地提高了比较两个图形的性能(时间和分配数量)。这意味着诸如
setGraph
之类的内部比较新图形与现有图形的调用速度更快,并且导致跳过的帧更少。感谢 Michał Z 进行的彻底分析,从而实现了这一改进。(I6ad62) NavHost
现在将在第一次组合传递时呈现起始目的地,而不必等到第二次传递来读取更新后的状态。(I439a7,b/304852206)
错误修复
- 修复了如果使用完全相同的图形多次调用
setGraph
,并且图形中存在一个目的地包含连接两个目的地的操作,则回退栈将被弹出。 - 快速连续导航到并关闭的对话框将不再泄漏到
NavController.visibleEntries
列表中。(I67586,b/287969970) - 弹出条目后发生配置更改时,如果
saveState
为 false,条目的ViewModel
现在将被正确清除。(Idf242,b/298164648) - 修复了如果回退栈在配置更改或调用
setGraph
之前完全为空,则NavController
可能多次处理相同的深层链接的问题,只有当传入的 Intent 设置了FLAG_ACTIVITY_NEW_TASK
标志时才会出现此问题。(I73c7f)
依赖项更新
- 使用 Fragment 的 Navigation 现在依赖于 Fragment 1.6.2,修复了调用
clearBackStack
时嵌套 Fragment 的ViewModel
实例不会被清除的问题。
版本 2.7.4
版本 2.7.4
2023年10月4日
已发布 androidx.navigation:navigation-*:2.7.4
。版本 2.7.4 包含这些提交。
新功能
- 添加了对
popUpTo
使用带参数的路由的支持,允许回退到使用这些精确参数的特定条目,与popBackStack
中提供的支持相匹配。(I731f4,b/299255572)
错误修复
- 修复了使用
popUpTo
中断导航并使用另一个导航将导致FragmentNavigator
崩溃的问题。(I3c848,b/301887045) - 修复了系统返回按键导致
currentDestination
未正确更新以匹配显示的 Fragment 的问题。(Id0d6c,b/289877514) DialogFragment
生命周期现在将在其上方的对话框被关闭时正确地移动到RESUMED
状态。(I88f0d,b/301811387)
版本 2.7.3
版本 2.7.3
2023年9月20日
已发布 androidx.navigation:navigation-*:2.7.3
。版本 2.7.3 包含这些提交。
错误修复
- 修复了 Navigation with Fragments 中导致
visibleEntries
列表包含不正确条目的问题。(I5caa9,b/288520638) - 修复了导致浮动窗口目的地(即
Dialogs
、Bottomsheets
等)从不获取RESUMED
生命周期回调的问题。(I3b866,b/287505132)
版本 2.7.2
版本 2.7.2
2023年9月6日
已发布 androidx.navigation:navigation-*:2.7.2
。版本 2.7.2 包含这些提交。
错误修复
- Navigation 现在依赖于 Lifecycle
2.6.2
,修复了rememberSaveable
和 Navigation Compose 的NavHost
之间的交互问题,该问题会导致目的地和任何ViewModel
拥有的SavedStateHandle
实例的rememberSaveable
状态在进程死亡和重新创建后无法正确恢复。(b/298059596,b/289436035) - 修复了在 Navigation Compose 中同时显示多个对话框时出现的问题,其中部分遮挡的对话框(例如,不是最顶层的对话框)处于
CREATED
生命周期状态而不是STARTED
状态。(aosp/2728520,b/289257213) - 修复了在 Navigation Compose 中同时显示多个对话框时的一个问题:关闭最顶层的对话框会导致新的最顶层对话框卡在
STARTED
生命周期状态,而不是正确地移动到RESUMED
状态。(aosp/2629401,b/286371387) - 如果 Navigation Safe Args 实际上并没有被执行,它将不再急切地实例化其任务。(I0e385,b/260322841)
依赖项更新
- Navigation Compose 现在依赖于 Compose 1.5.1。
2.7.1 版本
2.7.1 版本
2023 年 8 月 23 日
androidx.navigation:navigation-*:2.7.1
已发布。2.7.1 版本包含这些提交。
错误修复
- 修复了 Navigation with Compose 中的一个问题:当使用
Scaffold
时,可能会出现尝试访问Lifecycle.State.DESTROYED
ViewModel
的错误。(I1dc11,b/268422136)
2.7.0 版本
2.7.0 版本
2023 年 8 月 9 日
androidx.navigation:navigation-*:2.7.0
已发布。2.7.0 版本包含这些提交。
自 2.6.0 版本以来的重要更改
Accompanist 的动画
现在 AnimatedContent
已稳定,我们可以将代码从 Accompanist Navigation Animation 移回 Navigation Compose 本身。
这意味着 AnimatedNavHost
中存在的所有设置自定义转换的支持都直接在 NavHost
中得到支持。
Accompanist Navigation Animation 将不会进行其他更改,我们很快就会正式弃用它,并提供如何迁移回 Navigation Compose 本身的指南,但这将是 迁移指南 的反向操作,如果您已经使用最新的 Accompanist alpha(0.31.2-alpha
),则无需进行其他 API 更改。(b/197140101)
错误修复
- Navigation Compose 中的 NavHost 现在可以正确拦截系统返回调用,即使在 Activity 已停止并恢复之后也是如此。(Icb6de,b/279118447)
依赖项更新
- Navigation 现在依赖于 Compose
1.5.0
(之前的版本为1.1.0
)。
2.7.0-rc01 版本
2023 年 7 月 26 日
androidx.navigation:navigation-*:2.7.0-rc01
已发布。2.7.0-rc01 版本包含这些提交。
错误修复
- 修复了一个问题:作为
NavHost
一部分创建的EnterTransition
和ExitTransition
lambda 即使在NavHost
从组合中移除后也可能保留在内存中。(I893d0)
已知问题
- Navigation 2.6.x 中存在一个问题:当使用 popUpTo 导航时,可能会导致
IllegalArgumentException
。您可以通过重构导航图来避免此异常,具体建议请参见 此处。(b/287133013)
2.7.0-beta02 版本
2023 年 6 月 28 日
androidx.navigation:navigation-*:2.7.0-beta02
已发布。2.7.0-beta02 版本包含这些提交。
错误修复
- Navigation Compose 现在使用
popUpTo
选项进行导航的自定义转换具有正确的 z 顺序。(/Ib1c3a,b/285153947)
2.7.0-beta01 版本
2023 年 6 月 7 日
androidx.navigation:navigation-*:2.7.0-beta01
已发布。2.7.0-beta01 版本包含这些提交。
错误修复
NavHost
in Navigation Compose 现在可以正确拦截系统返回调用,即使在Activity
已STOPPED
和RESUMED
之后也是如此。(Icb6de,b/279118447)
2.7.0-alpha01 版本
2023 年 5 月 24 日
androidx.navigation:navigation-*:2.7.0-alpha01
已发布。2.7.0-alpha01 版本包含这些提交。
Accompanist 的动画
现在 AnimatedContent
已稳定,我们可以将代码从 Accompanist Navigation Animation 移回 Navigation Compose 本身。
这意味着 AnimatedNavHost
中存在的所有设置自定义转换的支持都直接在 NavHost
中得到支持。
Accompanist Navigation Animation 将不会进行其他更改,我们很快就会正式弃用它,并提供如何迁移回 Navigation Compose 本身的指南,但这将是 迁移指南 的反向操作,如果您已经使用最新的 Accompanist alpha(0.31.2-alpha
),则无需进行其他 API 更改。(b/197140101)
错误修复
- 来自 Navigation
2.6.0-rc02
:修复了 Fragments 中 Navigation 的一个问题:使用popUpTo
导航并从返回堆栈中弹出片段而不重新创建其视图会导致系统返回停止工作。(Ieb8d4,b/281726455)
依赖项更新
- Navigation 现在依赖于 Compose
1.5.0-beta01
。
2.6.0 版本
2.6.0 版本
2023 年 6 月 7 日
androidx.navigation:navigation-*:2.6.0
已发布。2.6.0 版本包含这些提交。
自 2.5.0 版本以来 Navigation 的重要更改
NavBackStackEntry
的arguments
和传递给OnDestinationChangedListener
的arguments
现在只是在您导航到目标位置时创建的不变参数的副本。这意味着对这些 Bundles 进行的任何更改都不会反映在随后对arguments
或其他OnDestinationChangedListener
实例的访问中。NavDeepLink
现在支持数组的默认值,这允许支持将映射到参数数组类型的重复查询参数。NavType
现在还包括一个默认方法,可以重写该方法以组合两个解析的值。NavType
的自定义子类现在可以重写serializeAsValue
以将值序列化为字符串,从而允许在NavType
类中完全封装序列化和反序列化(通过parseValue
)。StringType
现在重写此方法以对给定的String
调用Uri.encode
。
自 2.5.0 版本以来 Navigation Compose 的重要更改
- 在使用
NavHost
预览可组合项时,现在默认情况下会显示 NavGraph 的startDestination
。 NavController.popBackStack(route)
、NavController.getBackStackEntry(route)
、NavController.clearBackStack(route)
现在都支持参数部分或完全填充的路由。请注意,参数必须与条目的参数完全匹配。- 尝试使用
navDeepLink
Kotlin DSL 创建空的NavDeepLink
现在将导致 lint 警告,指示深层链接需要 uri、action 和/或 mimetype 才能有效。
自 2.5.0 版本以来 Navigation with Fragments 的重要更改
NavHostFragment
不再自行拦截系统返回按钮。这允许底层FragmentManager
处理系统返回。这允许 Fragment1.7.0-alpha01
及更高版本在 Android U 设备上提供应用内预测返回动画。- 当使用 Navigation with Fragments 时,尝试手动执行将片段添加到
FragmentManager
返回堆栈的FragmentTransaction
现在将抛出IllegalArgumentException
。您应始终通过navigate()
API 添加片段。 - 当在导航 XML 文件的 activity 元素中使用精确字符串
${applicationId}
作为app:data
和app:dataPattern
属性中的占位符时,该占位符将在膨胀时自动填充上下文的packageName
。 FragmentNavigator
现在在导航和弹出NavBackStackEntries
时使用转换 API。这意味着NavBackStackEntry
Lifecycle
现在将在将它们的最终Lifecycle.State
移动之前等待进入和退出片段特效完成。DialogFragmentNavigator
现在在导航和弹出NavBackStackEntries
时使用转换 API。这意味着NavBackStackEntry
Lifecycle
现在将在移动到DESTROYED
之前等待DialogFragment
Lifecycle
移动到DESTROYED
。- 现在,
NavHostFragment
允许您在NavHostFragment
附加到FragmentManager
时立即检索NavController
,而不仅仅是在onCreate()
之后。 - 导航对动态特性模块的支持现在依赖于细粒度的 Play 特性交付库。
- 导航安全参数现在依赖于 Android Gradle 插件版本 7.3.0。这意味着它现在仅与 7.3.0+ 版本兼容。
自 2.5.0 版以来,NavigationUI 的重要更改
- 当将导航图的 ID 传递给
AppBarConfiguration
(例如通过Menu
)时,NavigationUI
现在只将该导航图的起始目标视为顶级目标,而不是错误地将图中的每个目标都标记为顶级目标。传递单个目标 ID 的行为保持不变。通过AppBarConfiguration
上新的isTopLevelDestination
函数,您可以获得同样的功能。 - 用于处理顶部应用栏的
NavigationUI
中的setupWithNavController
集成现在将android:label
中找到的ReferenceType
参数的R.string
值解析为其字符串值,而不是输出自动生成的资源整数。 NavigationUI
现在会在无法通过选定的MenuItem
进行导航时提供日志。
2.6.0-rc02 版本
2023 年 5 月 24 日
androidx.navigation:navigation-*:2.6.0-rc02
已发布。2.6.0-rc02 版本包含这些提交。
错误修复
- 修复了片段中导航的一个问题,在该问题中,使用
popUpTo
进行导航并从返回栈中弹出片段而不重新创建其视图会导致系统返回停止工作。(Ieb8d4,b/281726455)
2.6.0-rc01 版本
2023 年 5 月 10 日
androidx.navigation:navigation-*:2.6.0-rc01
已发布。2.6.0-rc01 版本包含这些提交。
错误修复
- 修复了片段中导航的一个问题,在该问题中,在
onResume()
生命周期回调中使用popUpTo
通过导航移除片段会导致IllegalStateException
。(I21884,b/279644470)
2.6.0-beta01 版本
2023 年 4 月 19 日
androidx.navigation:navigation-*:2.6.0-beta01
已发布。2.6.0-beta01 版本包含这些提交。
新功能
NavBackStackEntry
现在提供了一个自定义的toString
实现。(Iff00b)
错误修复
- 当在片段中使用导航时,尝试手动执行将片段添加到
FragmentManager
返回栈的FragmentTransaction
现在将抛出IllegalArgumentException
。您应该始终通过navigate()
API 添加片段。(I6d38e) - 当同一帧中存在添加条目的
navigate
和移除它的popBackStack
时,返回栈上的结果顶部条目现在将始终返回到RESUMED
Lifecycle.State
。(Id8067,b/276495952)
2.6.0-alpha09 版本
2023 年 4 月 5 日
androidx.navigation:navigation-*:2.6.0-alpha09
已发布。2.6.0-alpha09 版本包含这些提交。
错误修复
- 修复了无效路由的检查,以便如果
NavDestination
包含不可为空的NavArgument
,则此目标的路由必须包含与不可为空的NavArgument
同名的参数占位符。(Ic62bf,b/274697949) - 基于
Action/MimeType
的深层链接导航现在将在导航操作缺少Action/MimeType
与之匹配的NavDestination
所需的不可为空的NavArgument
时失败。(Ibfa17,b/271777424) - 当
NavController
设置具有与先前图相同的路由和目标的图时,它现在会正确地将其当前图节点及其返回栈目标替换为新实例。这修复了在不保存 Navigation Compose 中状态的情况下使用onLaunchSingleTop
时发生的崩溃。这也修复了一个错误,即导航到与根图关联的目标会构建不正确的返回栈。(I5bc58,b/275258161,b/275407804)
2.6.0-alpha08 版本
2023 年 3 月 22 日
androidx.navigation:navigation-*:2.6.0-alpha08
已发布。2.6.0-alpha08 版本包含这些提交。
新功能
- 现在,
NavHostFragment
允许您在NavHostFragment
附加到FragmentManager
时立即检索NavController
,而不仅仅是在onCreate()
之后。(Ic6382,b/220186282)
错误修复
- 修复了弹出包含不可为空参数的嵌套图时发生的
NullPointerException
。(6b3581,b/249988437) - 使用
popUpTo
进行导航后使用系统返回键时,NavController
的状态将弹出到正确的条目。(I3a8ec,b/270447657) FragmentNavigator
现在将在通过系统返回键或popBackStack()
弹出返回栈时正确弹出条目,无论事务是否对片段使用效果。(I81bdf)- 不使用导航将片段添加到
FragmentNavigator
的FragmentManager
将不再导致崩溃。(b17204,b/274167493)
依赖项更新
- 导航现在依赖于 Lifecycle
2.6.1
。(586fe7) - 导航现在依赖于 SavedState
1.2.1
。(078e4e) - 导航现在依赖于 ProfileInstaller
1.3.0
。(512f0c)
2.6.0-alpha07 版本
2023 年 3 月 8 日
androidx.navigation:navigation-*:2.6.0-alpha07
已发布。2.6.0-alpha07 版本包含这些提交。
错误修复
- 现在,采用路由的
getBackStackEntry
、popBackStack
和clearBackStack
API 变体采用具有可空参数和可空查询参数的路由模式(I22294,b/269302500) - 修复了从
NavController
调用clearBackStack()
不会清除与已清除返回栈关联的片段管理器中的保存状态的问题。(Ic1cce,b/271190202) - 修复了 2.6.0-alpha06 中的回归问题,该问题在标签之间使用系统返回键时会导致
BottomNavigationView
中突出显示错误的MenuItem
。(I634f6,b/270447657) - 修复了 2.6.0-alpha06 中的回归问题,该问题导致使用
Animation
时NavBackStackEntry
未移动到 RESUMED 状态。(Ib3589,b/269646882)
2.6.0-alpha06 版本
2023 年 2 月 22 日
androidx.navigation:navigation-*:2.6.0-alpha06
已发布。2.6.0-alpha06 版本包含这些提交。
新功能
- 使用
NavHost
预览可组合项时,它现在默认显示 NavGraph 的startDestination
。(I2b89f)
API 变更
- 所有
NavController
navigate
重载现在都用@MainThread
进行了注释,以确保它们在主线程上调用。(I2c0b0,b/263427111)
错误修复
- 修复了在使用动态片段导航时尝试导航时发生的崩溃。(I3ee29,b/268360479)
- 修复了通过系统返回按钮导航到另一个片段时,底部栏未更新到正确的选中项的错误(If559f,b/269044426)
已知问题
- 在片段中使用导航时,使用
Animation
API 时,NavBackStackEntry
的生命周期无法达到RESUMED
。(b/269646882) - 在片段中使用导航并使用
BottomNavigation
时,如果尝试恢复具有多个条目的返回栈,则BottomMenuItem
未正确更新。(b/270447657) - 在片段中使用导航后,恢复状态时,当片段被
DESTROYED
时,NavBackStackEntry
Lifecycle
不会被DESTROYED
。(b/270610768)
2.6.0-alpha05 版本
2023 年 2 月 8 日
已发布 androidx.navigation:navigation-*:2.6.0-alpha05
。 2.6.0-alpha05 版本包含以下提交。
新功能
NavController.popBackStack(route)
、NavController.getBackStackEntry(route)
和NavController.clearBackStack(route)
现在都支持参数部分或全部填充的路由。 请注意,参数必须与条目参数完全匹配。(Iebd28,Ic678c,I3b37b,b/257514373)FragmentNavigator
现在在导航和弹出NavBackStackEntries
时使用过渡 API。 这意味着NavBackStackEntry
的Lifecycle
现在将在进入和退出片段的特效完成后,才会将它们的最终Lifecycle.State
变更。(I3cb19,b/238686802)DialogFragmentNavigator
现在在导航和弹出NavBackStackEntries
时使用过渡 API。 这意味着NavBackStackEntry
的Lifecycle
现在将在DialogFragment
的Lifecycle
变为DESTROYED
后,才会变为DESTROYED
。(I53ee5,b/261213893)
API 变更
NavigatorState
现在提供prepareForTransition
API,允许Navigator
将NavBackStackEntries
移动到中间Lifecycle.State
。(I42c21,b/238686802)- 您现在可以通过
backstack
属性访问与NavGraphNavigator
或ComposeNavigator
关联的后退栈。ComposeNavigator
现在还公开了onTransitionComplete()
回调,用于标记已执行导航或popBackStack
操作的NavBackStackEntry
为已完成。(I02062,I718db,b/257519195)
错误修复
- 使用
push/popWithTransition
API 且条目正在处理时,导航器状态现在将执行空操作。(Iadbfa,b/261213893) - 当使用嵌套
NavGraph
的launchSingleTop
时,从原始目标到其startDestination
的所有目标都将正确添加到后退栈的顶部。(Id4bea,b/253256629) - 导航现在会在将
launchSingleTop
标志设置为 true 并导航到同一目标时,正确替换DialogFragment
实例。(I45b5a,b/149572817) - 当使用长度正好为 19 个字符的参数时,Navigation SafeArgs 将不再导致编译错误。(Id60bc,b/257110095)
2.6.0-alpha04 版本
2022 年 11 月 9 日
已发布 androidx.navigation:navigation-*:2.6.0-alpha04
。 2.6.0-alpha04 版本包含以下提交。
新功能
NavType
的自定义子类现在可以覆盖serializeAsValue
方法将值序列化为字符串,允许在NavType
类中完全封装序列化和反序列化(通过parseValue
)。StringType
现在覆盖此方法以对给定的String
调用Uri.encode
。(Ie5213,b/247637434)NavigationUI
现在在无法通过选定的MenuItem
进行导航时提供日志。(I2af5a,b/247730357)
错误修复
- 导航深度链接现在是延迟解析的,而不是在图形初始化时解析,这可以提高应用程序启动时的性能。(Iab0ab)
- 修复了在深度链接到具有空默认参数的目标后向上导航导致崩溃的问题。(I51c24,b/243183636)
依赖项更新
- 导航对动态特性模块的支持现在依赖于细粒度的 Play 功能交付库。(Ib4ddc)
- Navigation Safe Args 现在依赖于 Android Gradle 插件 7.3.0 版本。这意味着它现在仅与 7.3.0+ 版本兼容。(I47e49)
2.6.0-alpha03 版本
2022 年 10 月 24 日
已发布 androidx.navigation:navigation-*:2.6.0-alpha03
。 2.6.0-alpha03 版本包含以下提交。
错误修复
- 来自 Navigation
2.5.3
:当没有可用于Crossfade
合成的目标时,NavHost
将不再导致NoSuchElementException
。它现在只会跳过合成。(Ieb46e,b/253299416) - 来自 Navigation
2.5.3
:修复了当目标从返回栈弹出时,保存的 Compose 状态(例如,rememberSaveable
的用法)未被遗忘和删除的问题。(I64949)
依赖项更新
- Navigation 现在依赖于 Fragment
1.5.4
。(Icd424)
2.6.0-alpha02 版本
2022 年 10 月 5 日
已发布 androidx.navigation:navigation-*:2.6.0-alpha02
。 2.6.0-alpha02 版本包含以下提交。
行为更改
- 当将导航图的 ID 传递给
AppBarConfiguration
(例如,通过Menu
)时,NavigationUI
现在只将该导航图的起始目标视为顶级目标,而不是错误地将图中的每个目标都标记为顶级目标。传递单个目标 ID 的行为保持不变。此相同的功能可通过AppBarConfiguration
上的新isTopLevelDestination
函数提供给您自己的代码。(Ie936e,b/238496771)
错误修复
navigation:navigation-fragment
组件现在依赖于 Fragment 1.5.2 版本。(I00ba4)- 导航到浮动窗口目标(例如对话框)时,将不再更新选定的菜单项。(I4cde8,b/240308330)
2.6.0-alpha01 版本
2022 年 9 月 7 日
已发布 androidx.navigation:navigation-*:2.6.0-alpha01
。 2.6.0-alpha01 版本包含以下提交。
新功能
- 用于与顶部应用栏协作的
NavigationUI
中的setupWithNavController
集成现在将为在android:label
中找到的ReferenceType
参数解析R.string
值为其字符串值,而不是输出自动生成的资源整数。(I5f803,b/167959935) NavDeepLink
现在支持数组的默认值,这允许支持将映射到参数数组类型的重复查询参数。NavType
现在还包含一个默认方法,可以覆盖该方法以组合两个已解析的值。(Id68c3,b/209977108)- 当使用确切的字符串
${applicationId}
作为导航 XML 文件的 activity 元素中app:data
和app:dataPattern
属性中的占位符时,该占位符将在膨胀时自动填充上下文的packageName
。(Iaabde,b/234223561) - 尝试使用
navDeepLink
Kotlin DSL 创建空NavDeepLink
现在将导致 lint 警告,指示深度链接需要 uri、操作和/或 mimetype 才能有效。(I08d2f,b/154038883)
API 变更
- 添加了新的
NavDestination
扩展函数,用于解析android:label="{arg}"
形式的参数的动态标签为字符串。通过将R.string
值解析为其字符串值来支持ReferenceType
参数。(I07d89,b/236269380)
行为更改
- NavBackStackEntry 的
arguments
和传递给OnDestinationChangedListener
的arguments
现在只是在您导航到目标时创建的不可变参数的副本。这意味着对这些 Bundles 进行的任何更改都不会反映在随后对arguments
或其他OnDestinationChangedListener
实例的访问中。(I676f5)
错误修复
- 来自 Navigation
2.5.2
:动态导航现在会在导航到它们之前正确尝试安装来自其他模块的 Activity 目标。(Ia2c16,b/240292838) - 来自 Navigation
2.5.2
:导航现在会在导航到同一目标并将launchSingleTop
标志设置为 true 时正确替换 Fragment 实例。(I5a2f1,b/237374580) - 来自 Navigation
2.5.2
:修复了由导航到与新弹出的起始目标共享父级的双重嵌套图导致的IllegalStateException
。(I9f7cb,b/243778589)
2.5 版本
2.5.3 版本
2022 年 10 月 24 日
已发布 androidx.navigation:navigation-*:2.5.3
。2.5.3 版本包含以下提交。
错误修复
- 当没有可用于
Crossfade
组合的目的地时,NavHost
将不再导致NoSuchElementException
。它现在只会跳过组合。(Ieb46e,b/253299416) - 修复了当目的地从返回栈中弹出时,保存的 Compose 状态(例如,
rememberSaveable
的用法)未被遗忘和移除的问题。(I64949)
2.5.2 版本
2022 年 9 月 7 日
已发布 androidx.navigation:navigation-*:2.5.2
。2.5.2 版本包含以下提交。
错误修复
- 动态导航现在会在导航到其他模块的 Activity 目的地之前,正确尝试安装它们。(Ia2c16,b/240292838)
- 导航现在会在导航到相同的目的地并将
launchSingleTop
标志设置为 true 时,正确替换 Fragment 实例。(I5a2f1,b/237374580) - 修复了导航到与新弹出的起始目的地共享父级的双重嵌套图时导致的
IllegalStateException
。(I9f7cb,b/243778589)
依赖项更新
- 导航
2.5.2
现在依赖于 Fragment1.5.2
。(aosp/2178734)
2.5.1 版本
2022 年 7 月 27 日
已发布 androidx.navigation:navigation-*:2.5.1
。2.5.1 版本包含以下提交。
错误修复
- 当使用在
Bundle
中保存的自定义参数类型时,Navigation Safe Args
将不再在生成的类中导致弃用警告。(Id86ed,b/237725966)
依赖项更新
- 导航库现在依赖于 Lifecycle
2.5.1
。(Ib4451) - 导航库现在依赖于 Activity
1.5.1
。(I3efe8) - 导航库现在依赖于 Fragment
1.5.1
。(I56177)
2.5.0 版本
2022 年 6 月 29 日
已发布 androidx.navigation:navigation-*:2.5.0
。2.5.0 版本包含以下提交。
自 2.4.0 版本以来的重要更改
- CreationExtras 集成 -
Navigation
现在可以通过 Lifecycle2.5.0
的CreationExtras
提供一个无状态的ViewModelProvider.Factory
。
Navigation SafeArgs
Navigation Safe Args
已将Android Gradle Plugin
依赖项升级为依赖于7.0.4
,放弃了对低于7.0
的 AGP 版本的兼容性。- 添加了对使用 namespace build.gradle 属性代替 applicationId 的支持。
其他更改
visibleEntries
API 现在不再是实验性的,它提供了一个函数来检索根据NavController
目前可见的所有条目。
2.5.0-rc02 版本
2022 年 6 月 15 日
已发布 androidx.navigation:navigation-*:2.5.0-rc02
。2.5.0-rc02 版本包含以下提交。
错误修复
- 修复了使用 Navigation Compose
NavHost
时,在底部目的地之间快速切换导致的崩溃。(I3979a,b/234054916) - 当使用
applicationIdSuffix
和 namespace 且没有applicationId
或applicationId
和 namespace 不同时,Navigation SafeArgs
将不再崩溃。(I754b1,b/233119646) NavArgument
现在具有自定义的toString()
函数,用于显示参数的内部值。(I900a8)
2.5.0-rc01 版本
2022 年 5 月 11 日
已发布 androidx.navigation:navigation-*:2.5.0-rc01
。2.5.0-rc01 版本包含以下提交。
新功能
- 添加了一个新的 lint 规则,用于警告在
navigation.xml
文件中将<deeplink>
元素放在<activity>
元素内的行为。(Ic15a5,b/178403185)
错误修复
NavHost
和DialogHost
中的可组合作用域现在按预期顺序处置,即内部可组合项在外部可组合项之前处置。(I157e6)- Navigation SafeArgs 现在在
ArgumentsGenerationTask
中使用PathSensitivity.RELATIVE
以允许缓存可重新定位。这意味着现在可以从 CI 构建重用到本地构建的缓存条目。(I5f67c,b/173420454) UnrememberedGetBackStackEntryDetector
lint 规则已更新,以确保围绕对getBackStackEntry()
的调用的remember
调用也传入NavBackStackEntry
对象作为键。(Ib7081,b/227382831)
2.5.0-beta01 版本
2022 年 4 月 20 日
已发布 androidx.navigation:navigation-*:2.5.0-beta01
。2.5.0-beta01 版本包含以下提交。
错误修复
DialogNavigator
现在在执行dismiss()
调用时使用popWithTransition
。这修复了在dialog
目的地中使用ViewModel
时发生的竞争条件,该竞争条件会在通过使用系统返回键或点击对话框外部退出来关闭对话框时导致IllegalStateException
。(Id7376,b/226552301)
依赖项更新
- 导航现在依赖于 Lifecycle
2.5.0-beta01
,修复了在使用多个返回栈时,在一个非主底部导航选项卡中将一个NavHost
嵌套在另一个NavHost
内导致的IllegalStateException
。
2.5.0-alpha04 版本
2022 年 4 月 6 日
已发布 androidx.navigation:navigation-*:2.5.0-alpha04
。2.5.0-alpha04 版本包含以下提交。
API 变更
visibleEntries
现在不再是实验性的。(I4829f,b/225394514)
错误修复
- NavHost 现在依赖于来自
NavController
的visibleEntries
来确定要组合哪些条目。这意味着当使用嵌套 NavHost 时,内部NavHost
现在应该能够正确地动画退出。(I4ba2b,b/225394514) - 现在,
NavController
提供的visibleEntries
StateFlow
基于条目的最大生命周期状态,而不是当前生命周期状态。这意味着即使navController
的主机生命周期低于 STARTED,可见条目的列表也将保持不变。(I9e2a8,b/225394514) SavedStateViewFactory
现在支持即使使用SavedStateRegistryOwner
初始化也可以使用CreationExtras
。如果提供了额外内容,则会忽略已初始化的参数。(I6c43b,b/224844583)NavDeepLink
现在可以解析具有单个没有值的查询参数的 Uri。(I0efe8,b/148905489)- 空字符串现在被视为深度链接中的有效参数。(I70a0d,b/217399862)
- 当使用 namespace 且没有
AndroidManifest.xml
时,Navigation Safe Args
将不再崩溃。(I17ccf,b/227229815)
2.5.0-alpha03 版本
2022 年 2 月 23 日
已发布 androidx.navigation:navigation-*:2.5.0-alpha03
。2.5.0-alpha03 版本包含以下提交。
API 变更
- 您现在可以将
CreationExtras
传递给by navGraphViewModels
来创建ViewModel
。(I29217,b/217618359)
错误修复
NavDeepLinks
现在正确支持嵌入在路由/深度链接 URI 中的编码换行符。(I513d1,b/217815060)- 现在,当与
NavBackStackEntries
一起使用以创建 ViewModel 时,CreationExtras
将正常工作。(I69161,b/217617710) - Navigation Safe Args 现在支持使用
build.gradle
中定义的 namespace 来代替 AndroidManifest 中的包。(I659ef,b/217414933)
2.5.0-alpha02 版本
2022 年 2 月 9 日
已发布 androidx.navigation:navigation-*:2.5.0-alpha02
。2.5.0-alpha02 版本包含以下提交。
错误修复
- 来自 Navigation
2.4.1
:当使用 viewbinding 和嵌套图时,NavHostFragment
现在将正确设置OnBackPressedDispatcher
。(Ifbb51,b/214577959) - 从 导航
2.4.1
开始:通过多个嵌套的NavGraph
进行深度链接时,返回栈现在将正确包含中间的起始目的地。(I504c0,b/214383060)
版本 2.5.0-alpha01
2022年1月26日
androidx.navigation:navigation-*:2.5.0-alpha01
已发布。2.5.0-alpha01 版本包含这些提交。
新功能
NavBackStackEntry
现在与 ViewModel CreationExtras 集成,作为 Lifecycle2.5.0-alpha01
的一部分引入。(Ib9fe2,b/207012490)
错误修复
- 修复了从 Fragment 的
onCreate()
访问通过by navGraphViewModels()
创建的ViewModel
会导致IllegalStateException
错误的问题。(I8a14d) NavDeepLink
将不再不必要地对参数进行两次解码,这意味着现在将正确的参数传递到您的最终目的地。(I31b0a,b/210711399)
Safe Args
- Safe Args 现在依赖于 Android Gradle Plugin 7.0.4 版本。这意味着 Navigation Safe Args 将不再与 7.0 之前的 Android Studio 版本兼容,但现在与 Android Gradle Plugin 7.1.0 及更高版本兼容。(I41c88,b/213086135,b/207670704)
版本 2.4.2
版本 2.4.2
2022 年 4 月 6 日
androidx.navigation:navigation-*:2.4.2
已发布。2.4.2 版本包含这些提交。
错误修复
- 从 导航
2.5.0-alpha03
反向移植:NavDeepLinks
现在正确支持嵌入在路由/深度链接 URI 中的编码换行符。(I513d1,b/217815060) - 从 导航
2.5.0-alpha03
反向移植:Navigation Safe Args 现在支持使用build.gradle
中定义的命名空间来代替 AndroidManifest 中的包名。(I659ef,b/217414933) - 从 导航
2.5.0-alpha04
反向移植:当使用命名空间且没有AndroidManifest.xml
时,Navigation Safe Args
将不再崩溃。(I17ccf,b/227229815) - 从 导航
2.5.0-alpha04
反向移植:空字符串现在被认为是深度链接中有效的参数。(I70a0d,b/217399862)
版本 2.4.1
版本 2.4.1
2022 年 2 月 9 日
androidx.navigation:navigation-*:2.4.1
已发布。2.4.1 版本包含这些提交。
错误修复
- 当使用 ViewBinding 和嵌套图时,
NavHostFragment
现在将正确设置OnBackPressedDispatcher
。(Ifbb51,b/214577959) - 通过多个嵌套的
NavGraph
进行深度链接时,返回栈现在将正确包含中间的起始目的地。(I504c0,b/214383060) - 从 导航
2.5.0-alpha01
反向移植:修复了从 Fragment 的onCreate()
访问通过by navGraphViewModels()
创建的 ViewModel 会导致IllegalStateException
错误的问题。(I8a14d) - 从 导航
2.5.0-alpha01
反向移植:NavDeepLink
将不再不必要地对参数进行两次解码,这意味着现在将正确解码的参数传递到您的最终目的地。(I31b0a,b/210711399) - 从 导航
2.5.0-alpha01
反向移植:Safe Args 现在依赖于 Android Gradle Plugin 7.0.4 版本。这意味着 Navigation Safe Args 将不再与 7.0 之前的 Android Studio 版本兼容,但现在与 Android Gradle Plugin 7.1.0 及更高版本兼容。(I41c88,b/213086135,b/207670704)
版本 2.4.0
版本 2.4.0
2022年1月26日
androidx.navigation:navigation-*:2.4.0
已发布。2.4.0 版本包含这些提交。
自 2.3.0 版本以来的重要更改
- 所有 Navigation 工件都已使用 Kotlin 重写。这改进了使用泛型(例如
NavType
子类)的类的空值性。所有曾经是-ktx
工件一部分的 Kotlin 扩展函数都已移动到它们各自的主工件中。-ktx
工件将继续发布,但它们是完全空的。 navigation-fragment
工件现在包含通过新的AbstractListDetailFragment
预构建的 双面板布局 实现。此 Fragment 使用SlidingPaneLayout
来管理列表面板(您的子类提供)和细节面板,细节面板使用NavHostFragment
作为其实现,如我们的 示例实现 中所示。NavController
上的currentBackStackEntryAsFlow()
方法提供了一个Flow
,每当当前NavBackStackEntry
更改时都会发出信号。此 flow 可用作手动管理OnDestinationChangedListener
的替代方法。NavController
现在可以通过实验性的visibleEntries
属性提供一个StateFlow
来检索所有可见NavBackStackEntry
实例的列表。- 现在可以扩展
NavType
类来创建自定义 NavType。仅当以编程方式(例如通过 Navigation Graph Kotlin DSL)构建导航图时才支持自定义类型。 Navigation 现在提供了
findStartDestination()
和getHierarchy()
API,可用于帮助实现自定义 NavigationUI。findStartDestination()
是NavGraph
上的扩展函数,它将找到导航到该图时将显示的实际起始目的地,即使startDestination
本身是嵌套的NavGraph
。getHierarchy()
是NavDestination
上的函数,可用于验证给定目的地是否位于另一个目的地的层次结构中。val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
NavigationUI
中采用BottomNavigationView
的方法已更新为改为采用 Material1.4.0
中引入的超类NavigationBarView
。这允许这些方法与NavigationRailView
一起使用。通过 XML 膨胀
<action>
元素时,动画属性可以使用从您的主题中提取的属性,使用app:enterAnim="?attr/transitionEnter"
语法。Safe Args 现在为每个
NavArgs
类生成一个fromSavedStateHandle()
方法。(#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) }
导航路由和 Kotlin DSL
之前的 Navigation 版本依赖于每个目的地都有一个常量整型 ID,该 ID 将唯一地标识它与其同级目的地,并允许您直接或通过操作 navigate()
到该目的地。虽然这仍然有效且有用,尤其是在您在 XML 中定义导航图并可以使用自动生成的 R.id
常量或 Safe Args(它使用这些常量在构建时生成代码)的情况下,但这种唯一整数系统并未捕捉到通过 Navigation Kotlin DSL 以编程方式在运行时构建完全动态图所需语义含义和表达力。
此版本引入了一种新选项,用于通过其路由唯一标识导航图中的目的地。路由是定义目的地唯一路径的 String
。所有采用目的地 ID 的 Kotlin DSL 方法现在都已弃用,并替换为采用路由的等效 API。
每个路由都应被视为定义该目的地的 Uri
的“路径”部分,例如 home
、profile/{userId}
、profile/{userId}/friends
等。当目的地的标识与特定内容相关联时,这些动态参数应作为路由的一部分,遵循与 隐式深度链接 相同的规则。
所有以前只采用 ID 的 NavController
API 现在都有一个采用路由 String
的重载。这包括 navigate()
、popBackStack()
、popUpTo()
和 getBackStackEntry()
。
这产生了一些 API 影响
- Kotlin DSL 上的
popUpTo
属性已被弃用,取而代之的是popUpToId
。 getStartDestination()
API 已被弃用,取而代之的是getStartDestinationId()
。
与按 ID 导航不同,按路由导航遵循与 隐式深度链接 相同的规则,您可以直接导航到任何嵌套图中的任何目的地,确保这些路由可在 多模块项目 中使用,而无需显式地向每个目的地添加外部可见的深度链接。
Navigation Compose
navigation-compose
工件提供了 Navigation 组件 和 Jetpack Compose 之间的集成。它使用 @Composable
函数作为应用程序中的目的地。
此版本提供
- 一个
NavHost
可组合项,允许您使用 Kotlin DSL 构造导航图,使用composable
和dialog
目标,并支持可选的导航器,例如来自 Accompanist Navigation Material 的导航器。 - 强制支持目标之间的交叉淡入淡出。可以使用 Accompanist Navigation Animation 来使用实验性的 Compose API 控制进入和退出过渡。
- 将
Lifecycle
的作用域限定为每个可组合目标。只有当任何进入过渡完成时,每个目标才会达到RESUMED
状态,并且当任何退出过渡开始时,立即降至STARTED
状态,因此您可以避免所有IllegalStateException
和多点触控问题,只需在Lifecycle
为RESUMED
时触发navigate
调用。 - 在目标级别限定
ViewModel
的作用域(通过 Lifecycle ViewModel Compose2.4.0
的viewModel()
API 或 Hilt Navigation Compose1.0.0
的hiltViewModel()
),提供一个在配置更改和位于返回堆栈中(当您的可组合内容被处理时)都能够存活的作用域,并在 ViewModel 的onCleared()
中发出一个信号,指示与该NavBackStackEntry
相关的状态的永久处理和清理。 - 在目标级别限定
rememberSaveable
状态的作用域,确保在返回目标时自动保存和恢复所有可组合状态。 - 完全支持在进程死亡和重新创建后保存和恢复
NavController
及其目标状态。 - 自动集成系统后退按钮。
支持传递参数、将深层链接附加到目标以及将结果返回到之前的目标。
在
rememberNavController()
和currentBackStackEntryAsState()
中提供 Compose 特定的辅助函数,允许 提升状态 并将NavController
连接到NavHost
之外的可组合项(例如底部导航栏)。
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()
}
}
}
有关更多信息,请参阅 Compose Navigation 指南。
多个返回堆栈
NavController 负责管理目标的返回堆栈,当您 navigate()
到它们时将目标添加到返回堆栈,当您调用 popBackStack()
或触发系统后退按钮时将其删除。现有的 NavOptions
类以及与导航图 XML 中的 <action>
元素的集成已扩展到支持保存和恢复返回堆栈。
作为此更改的一部分,NavigationUI
的 onNavDestinationSelected()
、BottomNavigationView.setupWithNavController()
和 NavigationView.setupWithNavController()
方法现在会自动保存和恢复弹出目标的状态,从而无需任何代码更改即可支持多个返回堆栈。使用带有 Fragment 的 Navigation 时,这是与多个返回堆栈集成的推荐方法。
保存和恢复状态的基础 API 通过多个层面公开
在 Navigation XML 中,
<action>
元素现在可以使用app:popUpToSaveState
和app:restoreState
布尔属性来保存通过app:popUpTo
弹出的任何目标的状态,并恢复与作为app:destination
传递的目标关联的状态。<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
在
navOptions
Kotlin DSL 中,您可以在popUpTo
生成器 上添加restoreState
布尔属性和saveState
布尔属性。// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
通过
NavOptions.Builder
手动构建NavOptions
对象时,您可以使用setRestoreState()
和setPopUpTo()
的新重载,该重载带有一个额外的saveState
参数。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);
对
popBackStack()
的编程调用现在可以包含一个额外的saveState
参数。您可以使用
clearBackStack()
方法清除使用popBackStack()
或popUpToSaveState
保存的任何状态。
在所有情况下,NavController
都将保存和恢复每个 NavBackStackEntry
的状态,包括任何导航目标作用域的 ViewModel
实例。Navigator
API 已更新,以使每个 Navigator
都能支持保存和恢复其自身的状态。
行为变更
NavDeepLinkBuilder
现在将PendingIntent.FLAG_IMMUTABLE
添加到createPendingIntent()
返回的PendingIntent
,确保此 API 在面向 Android 12 时按预期工作。- Navigation 现在依赖于 Lifecycle
2.3.1
,现在将setGraph()
、popBackStack()
、navigateUp()
和navigate()
(更新NavBackStackEntry
Lifecycle
的方法)标记为@MainThread
,使 Navigation 与 Lifecycle2.3.0
中引入的主线程强制执行保持一致。 - 深层链接现在会验证
Uri
中是否存在所有必需的参数(没有默认值的参数)。 NavDeepLink
解析的参数现在将井号与问号一样视为路径段之间的分隔符,防止参数跨越井号。- 生成操作时,从 Safe Args 生成的 Kotlin 代码现在将没有默认值的参数放在具有默认值的参数之前作为参数。
- 生成参数时,Safe Args 现在将没有默认值的参数放在具有默认值的参数之前。
- Safe-Args 现在依赖于 Android Gradle Plugin 4.2.0。这意味着您不应该再收到使用
applicationIdTextResource
的警告。
已知问题
- 在 Navigation
2.5.0-alpha01
中修复:从 Fragment 的onCreate()
访问通过by navGraphViewModels()
创建的ViewModel
将会失败并出现IllegalStateException
。(b/213504272) - 在 Navigation
2.5.0-alpha01
中修复:Safe Args 2.4.0 与 Android Gradle Plugin 7.1.0 及更高版本不兼容。(b/213086135) - 使用多个嵌套导航图进行深层链接不会正确创建完整的返回堆栈。(b/214383060)
版本 2.4.0-rc01
2021 年 12 月 15 日
androidx.navigation:navigation-*:2.4.0-rc01
已发布。版本 2.4.0-rc01 包含这些提交。
行为变更
NavDeepLink
解析的参数现在将井号与问号一样视为参数之间的分隔符。(I21309,b/180042703)
错误修复
- 深层链接将不再忽略其值与占位符名称相同的参数。(If8017,b/207389470)
NavController
在NavController
恢复后使用过渡弹出嵌套目标时将不再崩溃。(I0f7c9,b/205021623)- 使用无效
startDestination
时的错误消息现在将默认为起始目标的路由(如果可用)。(I86b9d,b/208041894)
Navigation Compose 错误修复
- 修复了使用底部导航菜单项在起始目标和其他目标之间快速切换可能导致的崩溃问题。(Ic8976,b/208887901)
- 对话框目标现在在配置更改或进程死亡后正确地恢复到屏幕顶部。(I4c0dc,b/207386169)
- 修复了当对话框被关闭时,尝试从对话框的
NavBackStackEntry
中检索ViewModel
将失败的问题。(I6b96d,b/206465487) - 修复了在 Navigation Compose 的
NavHost
中使用activity
目标时会导致无限重组的问题。(I8f64c) - 修复了 Navigation Compose 中的一个内存泄漏问题,该问题在配置更改或进程死亡后仍持有旧 Activity 的引用。(I4efcb,b/204905432)
Safe Args 错误修复
- 进程死亡后,
SafeArgs
在尝试恢复自定义 Parcelable 数组时不再崩溃。(I618e8,b/207315994) - 修复了 Safe Args 中的一个错误,该错误不允许布尔型数组具有
null
值。(I8c396,b/174787525)
2.4.0-beta02 版本
2021 年 11 月 3 日
androidx.navigation:navigation-*:2.4.0-beta02
已发布。2.4.0-beta02 版本包含这些提交。
API 变更
- 现在,显式和隐式深层链接的处理在导航到另一个图时会自动添加
saveState
标志,确保诸如NavigationUI.setupWithNavController
和使用多个回退栈的代码按预期工作。(Ic8807)
行为更改
- 现在,深层链接模式在 NavDeepLink 中延迟编译,而不是在膨胀期间编译。这应该会提高包含深层链接的导航图的膨胀时间。(b8d257,b/184149935)
错误修复
- 修复了当
NavHost
直接添加到 Activity 的setContent()
中时,NavBackStackEntries 在从Lifecycle.State.STARTED
移动到Lifecycle.State.CREATED
后被下推的问题。(Ia5ac1,b/203536683) - 修复了一个竞争条件,在实际显示对话框之前从回退栈中弹出
DialogFragment
目的地不会实际关闭对话框,这会导致用户手动关闭错误对话框时崩溃。(I687e5) - 修复了一个问题,即
NavigationUI
上的onNavDestinationSelected
API 即使您没有实际navigate()
到该导航图,也会返回true
。它现在使用setupWithNavController
内部使用的相同逻辑,仅使用目的地的hierarchy
选择与当前目的地关联的MenuItem
。(I2b053)
2.4.0-beta01 版本
2021 年 10 月 27 日
androidx.navigation:navigation-*:2.4.0-beta01
已发布。2.4.0-beta01 版本包含这些提交。
新功能
- 您现在可以使用
by navGraphViewModel
和路由作为使用 ID 的替代方法,以便更好地支持将 Navigation Kotlin DSL 与 Fragment 一起使用。(I901e3,b/201446416)
API 变更
visibleEntries
API 现在是实验性的。(I93f6f)
错误修复
- 当通过在相同屏幕之间来回导航中断转换时,ViewModel 将不再被销毁 (Id52d8,b/200817333)
- 可空
NavDeepLink
参数在将深层链接添加到NavDestination
时不再需要默认值。(I5aad4,b/201320030) - 具有不同生命周期的 NavBackStackEntries 不再被视为相等。这意味着 NavHost 在使用 singleTop 进行导航以及重新选择底部菜单项时将正确地重新组合所有目的地。(I1b351,b/196997433)
- 修复了
AbstractListDetailFragment
中导致onCreateListPaneView()
返回的列表窗格上的layout_width
和layout_weight
属性处理不正确或被忽略的问题。(f5fbf3) - 对话框目的地的视觉状态现在与
DialogFragmentNavigator
的状态正确同步。这意味着手动调用DialogFragment
的异步dismiss()
API 现在会正确清除已关闭对话框上方的所有对话框目的地。这不会影响您使用popUpTo
或popBackStack()
关闭对话框的情况。(I77ba2) AbstractAppBarOnDestinationChangedListener
现在对onDestinationChanged()
具有更清晰的错误消息。(Ie742d)
2.4.0-alpha10 版本
2021 年 9 月 29 日
androidx.navigation:navigation-*:2.4.0-alpha10
已发布。2.4.0-alpha10 版本包含这些提交。
新功能
- NavController 现在提供了通过
visibleEntries
StateFlow 获取所有可见NavBackStackEntry
实例列表的功能 (Ia964e) rememberNavController()
现在接受一组可选的Navigator
实例,这些实例将添加到返回的NavController
中,以便更好地支持可选的 Navigator,例如来自 Accompanist Navigation Material 的那些 Navigator。(I4619e)
错误修复
- Activity 重新创建时,动态导航将不再崩溃。(Ifa6a3,b/197942869)
- 修复了系统后退按钮的一个问题,该问题仅在返回到包含
NavHost
的可组合目的地后才会发生。(3ed148,b/195668143) - SafeArgs 现在按正确的参数顺序生成
fromBundle()
和fromSavedStateHandle()
的参数。(I824a8,b/200059831)
2.4.0-alpha09 版本
2021 年 9 月 15 日
androidx.navigation:navigation-*:2.4.0-alpha09
已发布。2.4.0-alpha09 版本包含这些提交。
新功能
- 您现在可以使用
clearBackStack()
方法清除使用popBackStack()
或popUpToSaveState
保存的任何状态。(I80a0f) - 您现在可以将参数和/或深层链接列表传递到嵌套导航图的构建器中,它们将自动添加到生成的图中。(I8a470,b/182545357)
API 变更
navArgument
Kotlin DSL 函数现在是navigation-common
的一部分,而不是navigation-compose
的一部分。这将需要更新导入才能继续使用此函数。(I1d095)
行为更改
- 生成参数时,Safe Args 现在将没有默认值的参数放在具有默认值的那些参数之前。(I89709,b/198493585)
错误修复
- 使用 Navigation Compose 时,NavGraphs 只有在其所有子项都被
DESTROYED
后才会被DESTROYED
。(I86552,b/198741720) - 可空
NavDeepLink
参数不再需要默认值。(Ia14ef,b/198689811) - 使用新图调用
setGraph()
现在除了其之前弹出回退栈的行为外,还会清除任何保存的回退栈。(I97f96) - 修复了使用
launchSingleTop
时未通知OnDestinationChangedListener
实例和currentBackStackEntryFlow
的问题。(Iaaebc)
依赖项更新
- Navigation Compose 现在依赖于 Activity Compose 1.3.1。(I05829)
- Navigation Compose 现在依赖于 Lifecycle ViewModel Compose
2.4.0-beta01
。(Ib86a3)
2.4.0-alpha08 版本
2021 年 9 月 1 日
androidx.navigation:navigation-*:2.4.0-alpha08
已发布。2.4.0-alpha08 版本包含这些提交。
新功能
- 现在可以扩展
NavType
类以创建自定义 NavType。仅当以编程方式(例如通过 Navigation Graph Kotlin DSL)构建导航图时,才支持自定义类型。(I78440,b/196871885)
行为更改
- 生成操作时,现在从 Safe Args 生成的 Kotlin 代码将参数按无默认值的参数在前,有默认值的参数在后的顺序排列。(Idb697,b/188855904)
- 深度链接现在会验证所有必需参数(那些没有默认值的参数)是否都存在于
Uri
中。(#204,b/185527157)
错误修复
- 在可组合函数 `composable()` 内使用
getBackStackEntry
和previousBackStackEntry
并结合remember()
,将不再因为回退栈中没有目标而导致异常。(I75138,b/194313238) - 更改回退栈参数并使用
launchSingleTop=true
时,Navigation Compose 现在可以正确地重新组合。(Iebd69,b/186392337) - 使用包含 13 个或 29 个目标的图表调用
setGraph
时,将不再出现ArrayIndexOutOfBoundsException
。(I1a9f1,b/195171984) - SafeArgs Java 生成器在生成 Args 类时,将不再导致 lint 警告。(I1a666,b/185843837)
外部贡献
- 感谢 ospixd 确保深度链接验证所有必需参数(那些没有默认值的参数)都存在于
Uri
中。(#204,b/185527157)
2.4.0-alpha07 版本
2021 年 8 月 18 日
androidx.navigation:navigation-*:2.4.0-alpha07
已发布。2.4.0-alpha07 版本包含这些提交。
错误修复
- Navigation Compose 现在可以在配置更改后以及在使用多个回退栈功能时更改图表后正确保存状态。(If5a3d,b/195141957)
- 使用带有多个回退栈的 Navigation Compose 时,重新选择相同的标签将不再导致出现空白屏幕。(I860dc,b/194925622)
NavHost
现在会观察NavBackStackEntry
的Lifecycle.State
的变化,这意味着现在在片段中使用NavHost
将会在生命周期变化时正确地重新组合,而不是导致出现空白屏幕。(I4eb85,b/195864489)- 修复了关闭
DialogFragment
后,在重新创建活动(例如,配置更改后)后不会正确更新NavController
状态的问题。(Icd72b) - 修复了弹出对话框目标不会更新 NavController 的系统后退按钮处理的问题,这可能会导致 NavController 拦截后退按钮,即使它没有任何回退栈可弹出。(If3b34)
- Safe-args 现在会自动为参数生成
toSavedStateHandle
方法,可用于测试ViewModel
代码。(If1e2d,b/193353880)
2.4.0-alpha06 版本
2021 年 8 月 4 日
androidx.navigation:navigation-*:2.4.0-alpha06
已发布。2.4.0-alpha06 版本包含这些提交。
API 变更
AbstractListDetailFragment
上的requireSlidingPaneLayout()
和requireDetailPaneNavHostFragment()
方法已分别重命名为getSlidingPaneLayout()
和getDetailPaneNavHostFragment()
。(I34a08)
行为更改
- 使用动画(如
Crossfade
)导航时,新目标的Lifecycle
现在只有在动画完成时才会到达RESUMED
状态。(If0543,b/172112072,b/194301889) - Navigation Compose 的
NavHost
现在会在第一次组合时设置图表。(Ieb7be)
错误修复
- 弹出导航图的最后一个目标不再抛出
ClassCastException
。(If0543,b/172112072,b/194301889) - 修复了在没有
Uri
的情况下添加深度链接并通过路由或深度链接导航时发生的NullPointerException
。(938a0c,b/193805425) - 修复了 Navigation Compose 中深度链接的
NavBackStackEntry
无法到达RESUMED
状态的问题。(I192c5) - 修复了弹出对话框目标不会更新 NavController 的系统后退按钮处理的问题,这可能会导致 NavController 拦截后退按钮,即使它没有任何回退栈可弹出。(aosp/1782668)
2.4.0-alpha05 版本
2021 年 7 月 21 日
androidx.navigation:navigation-*:2.4.0-alpha05
已发布。2.4.0-alpha05 版本包含这些提交。
行为更改
- Navigation Compose 的
NavHost
现在在导航目标时始终使用 Crossfades。(I07049,b/172112072) - 您现在可以更改 NavHost 的图表。具有相同 `startDestination` 和图表中目标的图表将被视为相等,并且不会清除
NavController
回退栈。(I0b8db,b/175392262)
错误修复
- 修复了从附加到
NavBackStackEntry
的LifecycleObserver
中调用popBackStack()
时发生的NoSuchElementException
,该异常是由对 NavController 状态的重入更新引起的。(I64621) AbstractListDetailFragment
现在允许在不使用AbstractListDetailFragment
时从您的 APK 中完全删除SlidingPaneLayout
。(I611ad)NavGraph
和NavDestination
现在覆盖了 equals 方法,因此具有相同值的两个对象将被视为相等。(I166eb,b/175392262)
2.4.0-alpha04 版本
2021 年 7 月 1 日
androidx.navigation:navigation-*:2.4.0-alpha04
已发布。2.4.0-alpha04 版本包含这些提交。
新功能
navigation-fragment
模块现在通过新的AbstractListDetailFragment
包含预构建的 双面板布局 实现。此片段使用SlidingPaneLayout
来管理列表面板(您的子类提供)和详细信息面板,详细信息面板使用NavHostFragment
作为其实现,如我们的 示例实现 中所示。(Iac4be,b/191276636)navigation-compose
模块的NavHost
现在除了支持composable
目标外,还支持dialog
目标。这些对话框目标将分别显示在可组合的Dialog
中,浮在当前composable
目标之上。(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()
}
}
}
API 变更
NavigatorState
中的add
函数已重命名为push
。所有当前对add()
的调用都需要更改为 push()。(Ie89fc,b/172112072)- 自定义
Navigator
实例现在可以使用NavigatorState
上的pushWithTransaction
和popWithTransition
API 来异步推送或弹出目标。请注意,这些 API 尚未被任何包含的导航器使用。(Ic4d7c,b/172112072)
行为更改
NavDeepLinkBuilder
现在将PendingIntent.FLAG_IMMUTABLE
添加到createPendingIntent()
返回的PendingIntent
中,确保此 API 在面向 Android 12 时按预期工作。(If8c52)
错误修复
- 修复了
<include-dynamic>
的问题,其中传递给图表的参数不会正确传递给动态包含的图表。(I3e115) - 修复了使用默认值为
@null
的string[]
参数导航到目标时发生的NullPointerException
。(I1fbe8) - 为
@Navigator.Name
添加 ProGuard 规则,修复使用 R8 3.1 完全模式时出现的问题。(I2add9,b/191654433) - 使用低于
1.5.0
版本的Kotlin
构建应用时,SafeArgs将不再失败。(Icd1ff,b/190739257)
2.4.0-alpha03 版本
2021年6月16日
已发布androidx.navigation:navigation-*:2.4.0-alpha03
。2.4.0-alpha03 版本包含以下提交。
错误修复
- 修复了一个问题:导航到包含的动态图需要调用两次
navigate()
。(I7785c,b/188859835) - 修复了Navigation
2.4.0-alpha01
中引入的回归问题:当您位于顶级目的地时,setupActionBarWithNavController()
不会正确移除向上图标。(I5d443,b/189868637) - 修复了在先前弹出NavController的根图后调用
popBackStack()
时发生的IllegalStateException
。(I2a330,b/190265699) - 使用
navigation-common
或任何依赖它的构件时,by navArgs()
的ProGuard规则现在可以正确应用。(I68800,b/190082521) - 第一次收到回调时调用
navigate()
的OnDestinationChangedListener
现在可以正确地获得第二个回调,并带有其导航到的目标。(Ie5f9e,b/190228815) - 使用动态特性模块和AGP 7.0+时,Safe Args不再崩溃。(I69518,b/189966576)
已知问题
- 由于依赖于较旧版本的Kotlin,使用Gradle
6.7.0
时,Safe Args将出现Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
错误。可以通过更新到Gradle 7.0来解决此问题。(b/190739257)
2.4.0-alpha02 版本
2021年6月2日
已发布androidx.navigation:navigation-*:2.4.0-alpha02
。2.4.0-alpha02 版本包含以下提交。
新功能
- 现在支持Activity、Fragment和Dialog目标的路由,以及整个DynamicNavigation Kotlin DSL。(Ib5544,Ia617b,I22f96,b/188914648,b/188901565)
NavigationUI
暂时添加了实验性API,允许选择退出保存状态。虽然始终保存状态是正确的行为,但仍然存在一些已弃用的库(例如保留的片段),在保存状态时无法支持它们,因此这为应用提供了逐步转换任何不受支持的API的机会。(Idf93c)Navigation现在提供
findDestination()
和getHierarchy()
API,可用于帮助实现自定义NavigationUI。findDestination()
是NavGraph
上的扩展函数,它将在图中找到一个目标。getHierarchy()
是NavDestination
上的函数,可用于验证给定目标是否位于另一个目标的层次结构中。(I2932f,b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
采用
BottomNavigationView
的NavigationUI方法已更新为改为采用Material1.4.0
中引入的超类NavigationBarView
。这允许这些方法与NavigationRailView
一起使用。(Ib0b36,b/182938895)通过XML膨胀
<action>
元素时,动画属性可以使用从主题中提取的属性,使用app:enterAnim="?attr/transitionEnter"
语法。(I07bc1,b/178291654)
API 变更
- 使用ID的Kotlin DSL构建器已被弃用,应替换为使用路由的构建器(I85b42,b/188816479) (I9f58f,b/188816479)
错误修复
DialogFragmentNavigator
现在使用NavigatorState.pop()
API来告知NavController
何时通过点击系统返回按钮或点击对话框外部来关闭对话框,确保NavController
状态始终与Navigator的状态同步。(I2ead9)使用
onDestinationChanged
回调操作OnDestinationChangedListeners
列表时,Navigation不再出现ConcurrentModificationException
。(Ib1707,b/188860458)在Kotlin中尝试生成方向属性时,Safe Args不再崩溃。(Id2416,b/188564435)
现在,NavDestination上的setId方法已使用
@IdRes
正确注释,因此它只接受资源ID。(I69b80)findNode
的int参数现在是resId
而不是resid
。(I7711d)
依赖项更新
- Safe-Args现在依赖于Android Gradle Plugin 4.2.0。这意味着您应该不再收到使用
applicationIdTextResource
的警告。(I6d67b,b/172824579)
2.4.0-alpha01 版本
2021年5月18日
已发布androidx.navigation:navigation-*:2.4.0-alpha01
。2.4.0-alpha01 版本包含以下提交。
新功能
NavController
上的currentBackStackEntryAsFlow()
方法提供了一个Flow
,每当当前NavBackStackEntry
更改时都会发出。此flow可以用作手动管理OnDestinationChangedListener
的替代方法。(I19c4a,#89,b/163947280)
多个返回堆栈
NavController
负责管理目标的后退堆栈,在您navigate()
到它们时将目标添加到后退堆栈,并在您调用popBackStack()
或触发系统返回按钮时将其移除。现有的NavOptions
类以及与导航图XML中的<action>
条目的集成已被扩展以支持保存和恢复后退堆栈。(b/80029773)
作为此更改的一部分,NavigationUI
的onNavDestinationSelected()
、BottomNavigationView.setupWithNavController()
和NavigationView.setupWithNavController()
方法现在会自动保存和恢复已弹出目标的状态,从而无需任何代码更改即可支持多个后退堆栈。当将Navigation与Fragment一起使用时,这是与多个后退堆栈集成的推荐方法。(Ie07ca)
保存和恢复状态的基础 API 通过多个层面公开
在 Navigation XML 中,
<action>
元素现在可以使用app:popUpToSaveState
和app:restoreState
布尔属性来保存通过app:popUpTo
弹出的任何目标的状态,并恢复与作为app:destination
传递的目标关联的状态。<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
在
navOptions
Kotlin DSL 中,您可以在popUpTo
生成器 上添加restoreState
布尔属性和saveState
布尔属性。// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
通过
NavOptions.Builder
手动构建NavOptions
对象时,您可以使用setRestoreState()
和setPopUpTo()
的新重载,该重载带有一个额外的saveState
参数。NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
对
popBackStack()
的编程调用现在可以包含一个额外的saveState
参数。
在所有情况下,NavController
都将保存和恢复每个NavBackStackEntry
的状态,包括任何导航目标范围内的ViewModel
实例。Navigator
API已更新,以使每个Navigator
都能支持保存和恢复其自身的状态。
用于Navigation Compose中composable
目标的ComposeNavigator
以及用于Navigation with Fragments中<fragment>
目标的FragmentNavigator
和DynamicFragmentNavigator
都已更新为使用新的Navigator API并支持保存和恢复状态。
导航路由
**路由**是唯一标识目标的String
。虽然以前仅在Navigation Compose中使用,但此概念现在已成为核心Navigation API的一部分。这在通过Navigation Kotlin DSL构建图时,提供了一种替代使用整数ID的方法。(b/172823546)
所有以前只接受ID的API现在都有一个接受路由String
的重载。这包括navigate()
、popBackStack()
、popUpTo()
和getBackStackEntry()
。
这产生了一些 API 影响
- Kotlin DSL上的
popUpTo
kotlin 属性已被弃用,应替换为popUpToId
。(I59c73,b/172823546) getStartDestination()
API已被弃用,应替换为getStartDestinationId()
。(I0887f,b/172823546)
对于从早期版本的Navigation Compose升级到Navigation Compose 2.4.0-alpha01
的开发者,这意味着不再需要以下扩展方法的导入,应将其删除。
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
KEY_ROUTE
参数已被NavDestination
上的route
属性替换,允许您直接调用navBackStackEntry.destination.route
。
API 变更
- 所有Navigation构件都已使用Kotlin重写。这改进了使用泛型(例如
NavType
子类)的类的空值性。所有以前是-ktx
构件一部分的Kotlin扩展函数都已移动到各自的主构件中。-ktx
构件将继续发布,但完全为空。(b/184292145) NavDeepLinkBuilder
现在支持将多个不同的目标添加到生成的回退堆栈。(I3ee0d,b/147913689)- 为
DynamicNavHostFragment
添加工厂函数(Icd515,b/175222619) NavBackStackEntry
的唯一ID现在作为其公共API的一部分公开。(Ie033a)- 现在,
NamedNavArgument
的name
和argument
字段以及解构函数已公开。(#174,b/181320559) - 引入了一个新的
NavBackStackEntry#provideToCompositionLocals
扩展函数,它可以将NavBackStackEntry
提供给相关的组合局部变量。(#175,b/187229439)
Safe Args
Safe Args 现在为每个
NavArgs
类生成一个fromSavedStateHandle()
方法。(#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) }
更新 Safe Args 以依赖于 KotlinPoet
1.8.0
。(#172,b/183990444)
行为更改
- 导航现在依赖于 Lifecycle
2.3.1
,并且现在将更新NavBackStackEntry
Lifecycle
的方法setGraph()
、popBackStack()
、navigateUp()
和navigate()
标记为@MainThread
,使导航与 Lifecycle2.3.0
中引入的主线程强制执行保持一致。(b/171125856) - 现在,从深度链接解析枚举参数时不区分大小写,允许像
http://www.example.com/red
这样的深度链接即使枚举值为RED
,也能匹配www.example.com/{color}
深度链接。(#152,b/135857840)
Compose 兼容性
androidx.navigation:navigation-compose:2.4.0-alpha01
只兼容 Compose 版本1.0.0-beta07
及以上版本。
错误修复
- 修复了一个问题,该问题会导致尾随参数占位符优先于具有匹配精确后缀的深度链接。(#153,b/184072811)
- 现在,
NavHostFragment
支持使用与默认DialogFragmentNavigator
相同的@Navigator.Name("dialog")
的自定义导航器。(Ib1c2c,b/175979140) - 改进了
NavigatorProvider#addNavigator
的行为,以确保使用相同实例重复调用它不会导致问题。(#176,b/187443146)
外部贡献
- 感谢 simonschiller 为 Safe Args 构建了对为每个
NavArgs
类生成fromSavedStateHandle()
方法的支持。(#122,b/136967621) - 感谢 Bradleycorn 使从深度链接解析枚举参数时不区分大小写。(#152,b/135857840)
- 感谢 osipxd 修复了一个问题,该问题会导致尾随参数占位符优先于具有匹配精确后缀的深度链接。(#153,b/184072811)
- 感谢 tatocaster 更新 Safe Args 以依赖于 KotlinPoet
1.8.0
。(#172,b/183990444) - 感谢 jossiwolf 将
NamedNavArgument
的name
和argument
字段以及解构函数设为公有。(#174,b/181320559) - 感谢 jossiwolf 引入了一个新的
NavBackStackEntry#provideToCompositionLocals
扩展函数,它可以将NavBackStackEntry
提供给相关的组合局部变量。(#175,b/187229439) - 感谢 jossiwolf 改进了
NavigatorProvider#addNavigator
的行为,以确保使用相同实例重复调用它不会导致问题。(#176,b/187443146)
Navigation Compose 版本 1.0.0
版本 1.0.0-alpha10
2021年4月7日
androidx.navigation:navigation-compose:1.0.0-alpha10
已发布。版本 1.0.0-alpha10 包含这些提交。
API 变更
NavHost
现在接受一个Modifier
,该Modifier
将传递到包装目标组合组件的组合容器。(I85aca,b/175125483)
错误修复
- 即使找不到
OnBackPressedDispatcherOwner
,NavHost
现在也能正常工作,例如预览NavHost
时。(I7d8b4) - Navigation Compose 现在依赖于 Navigation
2.3.5
,修复了在NavHost
目标内使用BackHandler
时出现的问题。(I7e63b,b/182284739)
版本 1.0.0-alpha09
2021年3月10日
androidx.navigation:navigation-compose:1.0.0-alpha09
已发布。版本 1.0.0-alpha09 包含这些提交。
API 变更
LocalViewModelStoreOwner.current
现在返回一个可空的ViewModelStoreOwner
,以便更好地确定当前组合中是否可用ViewModelStoreOwner
。需要ViewModelStoreOwner
的 API(例如viewModel()
和NavHost
)如果未设置ViewModelStoreOwner
,仍然会抛出异常。(Idf39a)
错误修复
- Navigation Compose 现在依赖于 Navigation 2.3.4,其中包含针对在设置图表后尝试设置相同的 ViewModelStore 对象的修复。(I65c24,b/177825470)
版本 1.0.0-alpha08
2021年2月24日
androidx.navigation:navigation-compose:1.0.0-alpha08
已发布。版本 1.0.0-alpha08 包含这些提交。
新功能
NavHost
现在使用该目标的NavBackStackEntry
来填充LocalSavedStateRegistryOwner
CompositionLocal,确保直接保存到SavedStateRegistry
的任何状态都将与目标一起保存和恢复。(I435d7,b/179469431)
版本 1.0.0-alpha07
2021年2月10日
androidx.navigation:navigation-compose:1.0.0-alpha07
已发布。版本 1.0.0-alpha07 包含这些提交。
依赖项更新
- Navigation Compose 现在依赖于 Lifecycle ViewModel Compose 1.0.0-alpha01 为
composable
目标提供viewModel()
支持。(I7a374) NavHost
现在使用来自 Activity-Compose 1.3.0-alpha01 的新的LocalOnBackPressedDispatcherOwner
来获取设置在NavController
上的OnBackPressedDispatcher
。(I65b12)
版本 1.0.0-alpha06
2021年1月28日
androidx.navigation:navigation-compose:1.0.0-alpha06
已发布。版本 1.0.0-alpha06 包含这些提交。
API 变更
- 在
NavController
上添加了一个getBackStackEntry(route: String)
扩展方法,该方法返回关联的NavBackStackEntry
。(If8931)
版本 1.0.0-alpha05
2021年1月13日
androidx.navigation:navigation-compose:1.0.0-alpha05
已发布。版本 1.0.0-alpha05 包含这些提交。
更新为依赖 Compose 1.0.0-alpha10。
版本 1.0.0-alpha04
2020年12月16日
androidx.navigation:navigation-compose:1.0.0-alpha04
已发布。版本 1.0.0-alpha04 包含这些提交。
- 更新为兼容 Compose
1.0.0-alpha09
。
版本 1.0.0-alpha03
2020年12月2日
androidx.navigation:navigation-compose:1.0.0-alpha03
已发布。版本 1.0.0-alpha03 包含这些提交。
错误修复
- 修复了配置更改或进程死亡和重新创建后
popBackStack()
和navigateUp()
不起作用的问题。(Icea47,b/173281473) - 现在可以在 NavHost 中正确导航到嵌套图。(I0948d,b/173647694)
1.0.0-alpha02 版本
2020年11月11日
androidx.navigation:navigation-compose:1.0.0-alpha02
已发布。1.0.0-alpha02 版本包含这些提交。
API 变更
- Navigation Compose 现在支持 NavOptions 用于 popUpTo 和 launchSingleTop 操作(If96c3,b/171468994)
- 添加了一个导航函数,该函数使用路由而不是 ID,允许您在 Navigation Compose DSL 中构建嵌套图。(I1661d)
- startDestination 现在位于 NavHost 参数列表中路由的前面(Ie620e)
- 您现在可以使用路由作为起始目标在 NavHost 可组合项之外创建图。(Iceb75)
1.0.0-alpha01 版本
2020年10月28日
android.navigation:navigation-compose:1.0.0-alpha01
已发布。1.0.0-alpha01 版本包含这些提交。
新功能
navigation-compose
工件提供了 Navigation 组件 和 Jetpack Compose 之间的集成。它使用 @Composable
函数作为应用程序中的目的地。
此初始版本提供
- 一个
NavHost
可组合项,允许您通过 Kotlin DSL 构造导航图。 - 在目标级别对生命周期、
ViewModel
和记住的状态进行作用域。 - 自动集成系统后退按钮。
- 支持传递参数、将深层链接附加到目标以及将结果返回到之前的目标。
- 在
rememberNavController()
和currentBackStackEntryAsState()
中使用 Compose 特定的辅助函数,以允许 提升状态 并将NavController
连接到NavHost
之外的可组合项(例如底部导航栏)。
有关更多信息,请参阅 Compose Navigation 指南。
2.3.5 版本
2.3.5 版本
2021年4月7日
androidx.navigation:navigation-*:2.3.5
已发布。2.3.5 版本包含这些提交。
新功能
- 使用
NavDeepLinkRequest
或Uri
导航时,您现在可以通过KEY_DEEP_LINK_INTENT
从参数获取意图来访问结果目标中的Uri
、操作和 MIME 类型,这与已用于外部深度链接的功能相呼应。(I975c3,b/181521877)
错误修复
OnBackPressedCallbacks
已添加到调度器中,其中NavBackStackEntry
作为 LifecycleOwner,现在可以在 Activity 生命周期为STOPPED
,然后为STARTED
后正确拦截返回。(Iff94f,b/182284739)- 深度链接域名解析现在不区分大小写,确保
www.example.com
同时匹配www.example.com
和www.Example.com
。请注意,查询参数名称仍然区分大小写。(#144,b/153829033) - 修复了当目标具有多个不可为空的默认参数并且您仅覆盖这些参数的子集时导航到该目标时可能发生的
NullPointerException
。(aosp/1644827)
依赖项更新
- Navigation Safe Args Gradle 插件现在依赖于 Kotlin Gradle 插件 1.4.31。(aosp/1661058,b/181156413)
外部贡献
- 感谢
bentrengrove
提供的拉取请求,使深度链接域名解析不区分大小写。(#144,b/153829033)
2.3.4 版本
2.3.4 版本
2021年3月10日
androidx.navigation:navigation-*:2.3.4
已发布。2.3.4 版本包含这些提交。
新功能
ReferenceType
参数现在可以作为深度链接 URI 的一部分正确解析。这同时支持原始整数值以及以0x
为前缀的十六进制值。(#127,b/179166693)- 具有
app:argType="float"
的参数的android:defaultValue
现在支持整数默认值,允许您使用android:defaultValue="0"
而不是需要使用0.0
。(#117,b/173766247)
错误修复
- 修复了使用 Navigation 对动态功能的支持时安装进度卡住的问题。(Ib27a7,b/169636207)
- 使用已设置的相同对象调用
setViewModelStore
或setLifecycleOwner
现在将成为无操作。(Idf491,b/177825470) - 使用 Java 时,Safe-Args 现在会在正确的方法上添加抑制注释。(I8fbc5,b/179463137)
外部贡献
- 感谢
JvmName
提供的拉取请求,确保ReferenceType
参数现在可以作为深度链接 URI 的一部分正确解析。(#127,b/179166693) - 感谢
tatocaster
提供的拉取请求,允许具有app:argType=”float”
的参数的defaultValue
现在支持整数默认值。(#117,b/173766247)
2.3.3 版本
2.3.3 版本
2021年1月27日
androidx.navigation:navigation-*:2.3.3
已发布。2.3.3 版本包含这些提交。
错误修复
- 在将
NavBackStackEntry
的Lifecycle
移动到CREATED
之前弹出它时,不再会发生崩溃。(Ie3ba3) - 修复了由 b/171364502 引起的回归问题,其中导航到动画资源值为
0
的活动会导致ResourceNotFoundException
。(I7aedb,b/176819931)
2.3.2 版本
2.3.2 版本
2020年12月2日
androidx.navigation:navigation-*:2.3.2
已发布。2.3.2 版本包含这些提交。
错误修复
- 修复了
NavigationUI
中的回归问题,其中使用具有onNavDestinationSelected
的<activity>
目标将无法导航到 Activity。(I22e34,b/171364502) - 修复了
navigation-dynamic-features-fragment
将导致多次导航到新安装的目标的问题。(aosp/1486056,b/169636207) - 修复了使用
launchSingleTop
时默认参数不会发送到OnDestinationChangedListener
实例的问题。(I2c5cb) - 修复了导航到嵌套导航图不会在返回堆栈上创建新的图实例的问题。(Ifc831)
- 修复了使用
navigate()
和删除导航图中最后一个目标的popUpTo
不会立即销毁并将导航图本身从返回堆栈中删除的问题。(I910a3) - Navigation SafeArgs 现在使用 KotlinPoet 1.7.2 版本,该版本增加了对 Kotlin 显式 API 模式的支持。(I918b5)
NavHostFragment.findNavController(Fragment)
现在除了对 Fragment 层次结构和 Fragment 的视图层次结构进行现有检查外,还检查 DialogFragment 的根装饰视图。这允许您使用FragmentScenario
和Navigation.setViewNavController()
测试使用 Navigation 的对话框片段。(I69e0d)
2.3.1 版本
2.3.1 版本
2020年10月14日
androidx.navigation:navigation-*:2.3.1
已发布。2.3.1 版本包含这些提交。
新功能
- 默认动画器资源已添加到 Navigation UI,建议使用它而不是默认动画资源。(b/167430145)
- NavOptions 现在覆盖了 hashcode 和 equals 方法(b/161586466)
- Navigation 现在在“没有 ID 的目标”IllegalArgumentException 中包含当前目标,这应该可以改善开发人员的调试体验。(b/168311416)
错误修复
- 即使生成的 argument 类名称超过 100 个字符,Safe Args 也将不再换行。(b/168584987)
依赖项更改
navigation-ui
现在依赖于 DrawerLayout 1.1.1,确保即使使用LOCK_MODE_LOCKED_CLOSED
或LOCK_MODE_LOCKED_OPEN
,NavigationUI
也能够打开抽屉。(b/162253907)- Safe Args 现在依赖于 KotlinPoet 1.6.0 (aosp/1435911)
- Safe Args 现在依赖于 AGP 4.0.1 (aosp/1442337)
2.3.0 版本
2.3.0 版本
2020年6月24日
androidx.navigation:navigation-*:2.3.0
已发布。 2.3.0 版本包含这些提交。
自 2.2.0 版本以来的主要更改
- 特性模块集成:
navigation-dynamic-features-runtime
和navigation-dynamic-features-fragment
工件允许您导航到特性模块中定义的目标位置,并根据需要自动处理特性模块的安装。有关详细信息,请参阅 使用特性模块进行导航。 - 导航测试:
navigation-testing
工件提供了一个TestNavHostController
,允许您设置当前目标位置并在导航操作后验证回退栈。有关详细信息,请参阅 测试导航。 - 返回结果:现在,导航回退栈上每个目标位置关联的
NavBackStackEntry
允许您访问SavedStateHandle
,该对象适用于存储应与特定回退栈条目关联的小量保存状态。有关详细信息,请参阅 向之前的目标位置返回结果。 NavigationUI
对Openable
的支持:NavigationUI
中所有DrawerLayout
的用法均已替换为在 CustomView1.1.0
中添加的更通用的Openable
接口(DrawerLayout
在 DrawerLayout1.1.0
中实现)。- 深度链接中的操作和 MIME 类型支持:深度链接已扩展为支持
app:action
和app:mimeType
,以及以前可用的app:uri
。NavController
现在通过新的NavDeepLinkRequest
类支持通过任何这些字段的组合进行导航。有关详细信息,请参阅 使用 NavDeepLinkRequest 进行导航。
已知问题
- 深度链接操作和 MIME 类型支持尚不可用于 清单合并器。在完成这项工作之前,清单中从
<nav-graph>
元素生成的任何<intent-filter>
元素都不会在其<data>
元素中包含您的 MIME 类型或您的自定义<action>
。您必须手动将相应的<intent-filter>
添加到您的清单中。
2.3.0-rc01 版本
2020年6月10日
androidx.navigation:navigation-*:2.3.0-rc01
已发布。 2.3.0-rc01 版本包含这些提交。
错误修复
- 修复了当使用
singleTop
将没有参数的目标位置实例替换为有参数的另一个实例时出现的NullPointerException
。(b/158006669) NavController
引发的所有destination is unknown
异常现在都包含其他调试信息,以帮助确定NavController
的状态。(b/157764916)
2.3.0-beta01 版本
2020年5月20日
androidx.navigation:navigation-*:2.3.0-beta01
已发布。 2.3.0-beta01 版本包含这些提交。
错误修复
- 修复了在进程死亡后
NavBackStackEntry
的Lifecycle
未正确更新的问题。(b/155218371) - 在调用
setGraph()
之前注册的OnDestinationChangedListener
实例现在会在进程死亡后正确接收已恢复的目标位置。(b/155218371) - 使用
singleTop
时,NavBackStackEntry
现在会正确更新其参数,并且更新后的参数会发送给所有OnDestinationChangeListener
实例。(b/156545508)
依赖项更新
NavigationUI
工件现在依赖于 CustomView1.1.0-rc01
和 DrawerLayout1.1.0-rc01
。(aosp/1309696)
2.3.0-alpha06 版本
2020年4月29日
androidx.navigation:navigation-*:2.3.0-alpha06
已发布。(2.3.0-alpha06 版本包含这些提交。)
新功能
- 深度链接已扩展为支持
app:action
和app:mimeType
,以及以前可用的app:uri
。NavController 现在通过新的NavDeepLinkRequest
类支持通过任何这些字段的组合进行导航。(b/136573074, b/135334841)
API 变更
- 极大地扩展了动态导航目标位置的 Kotlin DSL 支持。(b/148969800)
错误修复
- 修复了使用嵌套起始目标位置时忽略深度链接 Intent 的问题。(b/154532067)
2.3.0-alpha05 版本
2020年4月15日
androidx.navigation:navigation-*:2.3.0-alpha05
已发布。 2.3.0-alpha05 版本包含这些提交。
新功能
- 对于使用
<include-dynamic>
的 动态图包含,您不再需要指定app:graphPackage
,系统会通过在点后添加moduleName
后缀到applicationId
来使用默认值。如果您确实需要自定义graphPackage
,现在支持${applicationId}
占位符。(b/152696768) - Navigation Graph Kotlin DSL 现在为操作公开了一个
defaultArguments
Map
,这反映了在 Navigation XML 文件中的<action>
元素上设置默认值的能力。(b/150345605)
错误修复
- 来自 Navigation 2.2.2:修复了当您的 Activity 中有多个
NavHostFragment
实例时,深度链接到图的起始目标位置时发生的IllegalStateException
。(b/147378752)
依赖项更新
- Navigation 现在依赖于 Fragment
1.2.4
。(aosp/1277325) - 动态导航现在依赖于 Play Core
1.7.2
。(aosp/1282257)
2.3.0-alpha04 版本
2020年3月18日
androidx.navigation:navigation-*:2.3.0-alpha04
已发布。 2.3.0-alpha04 版本包含这些提交。
新功能
- 在 Navigation Kotlin DSL 中添加了对特性模块活动和片段目标位置的支持。(b/148969800)
API 变更
DynamicExtras
类不再使用构建器模式,现在可以直接构造。(aosp/1253671)DynamicActivityNavigator
现在在其构造函数中采用Context
而不是Activity
。(aosp/1250252)
错误修复
NavigationUI
不再忽略空标签(即,具有android:label=””
的目标位置),并且现在会正确地将标题设置为空字符串。(b/148679860)
依赖项更新
- Navigation 动态特性工件现在依赖于 Play Core
1.6.5
。(b/149556401)
2.3.0-alpha03 版本
2020年3月4日
androidx.navigation:navigation-*:2.3.0-alpha03
已发布。 2.3.0-alpha03 版本包含这些提交。
API 变更
AppBarConfiguration
不再依赖于具体的DrawerLayout
类,而是使用在 CustomView1.1.0-alpha02
中引入的Openable
接口(DrawerLayout
在 DrawerLayout1.1.0-alpha04
中实现),允许您将Openable
的自定义实现与NavigationUI
一起使用。(b/129030452)
错误修复
navigation-common-ktx
ProGuard 规则现在会正确地仅保留使用的NavArgs
类,而不是所有NavArgs
实例。(b/150213558)
依赖项更改
- Navigation 已恢复其对 Core
1.2.0
的依赖关系,现在依赖于 Core1.1.0
,以避免在 Navigation 不依赖于 Core1.2.0
中的任何新 API 时强制开发人员迁移到较新的依赖项。
2.3.0-alpha02 版本
2020年2月19日
androidx.navigation:navigation-*:2.3.0-alpha02
已发布。 2.3.0-alpha02 版本包含这些提交。
新功能
NavBackStackEntry
现在允许您访问SavedStateHandle
,该对象适用于存储应与特定回退栈条目关联的小量保存状态。有关示例用例,请参阅 返回结果。(b/79672220)
API 变更
- 新增了
getCurrentBackStackEntry()
和getPreviousBackStackEntry()
便捷方法,以便更轻松地检索当前和上一个目的地的NavBackStackEntry
。(b/79672220)
错误修复
- 现在,当在您自己的任务栈上启动应用程序时,
navigateUp()
会将当前目的地的参数和KEY_DEEP_LINK_INTENT
传递给上一个目的地。(b/147456890)
依赖项更改
- 导航现在依赖于Core
1.2.0
。
版本 2.3.0-alpha01
2020年2月5日
已发布 androidx.navigation:navigation-*:2.3.0-alpha01
。版本 2.3.0-alpha01 包含这些提交。
新功能
- 新的
navigation-testing
构件提供了一个TestNavHostController
类。当测试导航时,此类提供了一种替代使用模拟NavController
的方法,允许您设置当前目的地并在导航操作后验证回退栈。(b/140884273) - 新的
navigation-dynamic-features-fragment
(及其传递依赖项navigation-dynamic-features-runtime
)允许您从功能模块中包含目的地或整个导航图(通过<include-dynamic>
),在导航到这些目的地时提供按需功能模块的无缝安装。有关更多信息,请参阅使用功能模块导航。(b/132170186)
错误修复
- 来自Navigation
2.2.1
:不带查询参数的深层链接现在可以正确忽略任何查询参数,而不是将它们附加到尾随{argument}
元素或不匹配深层链接。(b/147447512) - 来自Navigation
2.2.1
:navigation-ui
的DrawerArrowDrawable
ProGuard规则已更新,以确保不需要android.enableJetifier=true
。(b/147610424) - 来自Navigation
2.2.1
:navigation-common-ktx
模块现在具有唯一的清单包名,而不是与navigation-runtime-ktx
共享相同的清单包名。(aosp/1141947)
依赖项更新
- 来自Navigation
2.2.1
:Navigation2.2.1
现在依赖于Lifecycle ViewModel SavedState2.2.0
和Fragment1.2.1
。
版本 2.2.2
版本 2.2.2
2020年4月15日
已发布 androidx.navigation:navigation-*:2.2.2
。版本 2.2.2 包含这些提交。
错误修复
- 修复了当您的Activity中有多个
NavHostFragment
实例时,深层链接到图的起始目的地时发生的IllegalStateException
。(b/147378752) NavigationUI
不再忽略空标签(即,具有android:label=””
的目的地),现在会正确地将标题设置为空字符串。这之前已在Navigation 2.3.0-alpha04中发布。(b/148679860)navigation-common-ktx
ProGuard规则现在只保留使用的NavArgs
类,而不是所有NavArgs
实例。这之前已在Navigation 2.3.0-alpha03中发布。(b/150213558
依赖项更新
- Navigation 现在依赖于 Fragment
1.2.4
。(aosp/1277325)
版本 2.2.1
版本 2.2.1
2020年2月5日
已发布 androidx.navigation:navigation-*:2.2.1
。版本 2.2.1 包含这些提交。
错误修复
- 不带查询参数的深层链接现在可以正确忽略任何查询参数,而不是将它们附加到尾随
{argument}
元素或不匹配深层链接。(b/147447512) navigation-ui
的DrawerArrowDrawable
ProGuard规则已更新,以确保不需要android.enableJetifier=true
。(b/147610424)navigation-common-ktx
模块现在具有唯一的清单包名,而不是与navigation-runtime-ktx
共享相同的清单包名。(aosp/1141947)
依赖项更新
- Navigation
2.2.1
现在依赖于Lifecycle ViewModel SavedState2.2.0
和Fragment1.2.1
。
版本 2.2.0
版本 2.2.0
2020年1月22日
已发布 androidx.navigation:navigation-*:2.2.0
。版本 2.2.0 包含这些提交。
自 2.1.0 以来重要的更改
- **NavBackStackEntry**: 现在可以调用
NavController.getBackStackEntry()
,传入回退栈上目的地的ID或导航图。返回的NavBackStackEntry
提供了一个导航驱动的LifecycleOwner
、ViewModelStoreOwner
(与NavController.getViewModelStoreOwner()
返回的相同)和SavedStateRegistryOwner
,此外还提供了用于启动该目的地的参数。 - **Lifecycle ViewModel SavedState 集成**: 使用
by navGraphViewModels()
或使用NavController.getBackStackEntry()
或NavController.getViewModelStoreOwner()
返回的ViewModelStoreOwner
的ViewModelProvider
构造函数时,SavedStateViewModelFactory
现在是使用的默认工厂。 - **对深层链接的查询参数支持**: 具有查询参数的深层链接现在支持重新排序的查询参数;当匹配深层链接时,具有默认值或可为空的参数现在是可选的。
- **改进的动画支持**:
NavHostFragment
现在使用来自Fragment 1.2.0的FragmentContainerView
,修复了动画z轴顺序问题以及窗口内嵌内容分发到Fragment的问题。
版本 2.2.0-rc04
2019年12月18日
已发布 androidx.navigation:navigation-*:2.2.0-rc04
。版本 2.2.0-rc04 包含这些提交。
错误修复
- 调整了
navigation-ui
使用的默认淡入淡出动画,以匹配Fragment1.2.0-rc04
中调整的淡入淡出动画。(b/145769814)
版本 2.2.0-rc03
2019年12月4日
已发布 androidx.navigation:navigation-*:2.2.0-rc03
。版本 2.2.0-rc03 包含这些提交。
错误修复
- 修复了使用查询参数和作为路径最后一部分的参数时深层链接解析出现的问题,该问题阻止解析最终路径参数的一个以上字符。(b/144554689)
- 修复了深层链接解析中可选参数将接收
"@null"
而不是null
的问题。(b/141613546) - 当与
FragmentContainerView
一起使用时,NavHostFragment
现在可以正确地在配置更改后恢复图形。(b/143752103)
依赖项更改
- 导航现在在适当情况下依赖于Lifecycle
2.2.0-rc03
、Lifecycle ViewModel SavedState1.0.0-rc03
、Activity1.1.0-rc03
和Fragment1.2.0-rc03
。
版本 2.2.0-rc02
2019年11月7日
已发布 androidx.navigation:navigation-*:2.2.0-rc02
。版本 2.2.0-rc02 包含这些提交。
依赖项更改
- 导航现在依赖于androidx.lifecycle
2.2.0-rc02
。
版本 2.2.0-rc01
2019年10月23日
已发布androidx.navigation:navigation-*:2.2.0-rc01
,自2.2.0-beta01
以来没有更改。版本 2.2.0-rc01 包含这些提交。
版本 2.2.0-beta01
2019年10月9日
已发布 androidx.navigation:navigation-*:2.2.0-beta01
。版本 2.2.0-beta01 包含这些提交。
新功能
NavDestination
及其子类现在重写了toString()
,以便在调试时提供更有用的信息。(b/141264986)
行为变更
- 匹配深层链接时,现在会忽略额外的查询参数,而不是导致匹配失败。(b/141482822)
错误修复
- 修复了如果也指定了查询参数,则会忽略深层链接路径中的参数的问题。(b/141505755)
Activity
上的navArgs()
Kotlin 扩展现在在没有额外内容时具有更好的错误消息。(b/141408999)- Safe Args 生成的
Directions
Java 类现在包含默认值。(b/141099045) - Safe Args 生成的
Args
Java 类现在包含默认值。(b/140123727) - 使用
Toolbar
时,NavigationUI
在顶级目的地之间移动时不再动画化文本更改。(b/140848160)
版本 2.2.0-alpha03
2019年9月18日
已发布 androidx.navigation:navigation-*:2.2.0-alpha03
。版本 2.2.0-alpha03 包含这些提交。
行为变更
- 调用
setGraph
后调用setViewModelStore()
现在会导致IllegalStateException
。这应该始终由NavHost
作为初始设置的一部分进行设置,以确保所有NavBackStackEntry
实例都具有ViewModel
实例的一致存储。(aosp/1111821)
错误修复
- 修复了使用附加到多个不同的导航图作用域
ViewModelStore
实例的ViewModel
实例时发生的ConcurrentModificationException
。(aosp/1112257)
版本 2.2.0-alpha02
2019年9月5日
已发布 androidx.navigation:navigation-*:2.2.0-alpha02
。此版本中包含的提交可以在这里找到这里。
新功能
- 具有查询参数的深层链接现在支持重新排序的查询参数;当匹配深层链接时,具有默认值或可为空的参数现在是可选的。(b/133273839)
- 现在您可以调用
NavController.getBackStackEntry()
,传入回退栈中目标位置或导航图的 ID。返回的NavBackStackEntry
提供了一个导航驱动的LifecycleOwner
、ViewModelStoreOwner
(与NavController.getViewModelStoreOwner()
返回的结果相同)和SavedStateRegistryOwner
,此外还提供用于启动该目标位置的参数。(aosp/1101691,aosp/1101710)
错误修复
- 修复了将
NavHostFragment
添加到ViewPager2
时出现IllegalArgumentException
的问题。(b/133640271) NavInflater
现在避免不必要地调用getResourceName()
,从而将加载时间加快了多达 40%。(b/139213740)
版本 2.2.0-alpha01
2019 年 8 月 7 日
androidx.navigation:navigation-*:2.2.0-alpha01
已发布。此版本中包含的提交可以在这里找到 这里。
新功能
- 使用
by navGraphViewModels()
或使用ViewModelStoreOwner
(由NavController.getViewModelStoreOwner()
返回)和ViewModelProvider
构造函数时,SavedStateViewModelFactory
现在是默认使用的工厂。(b/135716331)
API 变更
- 从 Navigation
2.1.0-rc01
开始:已删除在2.1.0-alpha02
中引入的NavController
上已弃用的getViewModelStore()
API。(aosp/1091021)
错误修复
NavHostFragment
现在使用FragmentContainerView
,修复了动画 z 顺序问题以及窗口内边距分派到片段的问题。(b/137310379)
版本 2.1.0
版本 2.1.0
2019年9月5日
androidx.navigation:navigation-*:2.1.0
已发布。此版本中包含的提交可以在这里找到 这里。
自 2.0.0 版本以来的重要更改
- 将 ViewModel 的范围限定为导航图:现在,您可以使用 Kotlin 用户使用的
-ktx
库中的by navGraphViewModels()
属性委托,或使用添加到NavController
的getViewModelStoreOwner()
API,创建作用域位于导航图级别的 ViewModel。有关更多信息,请参阅 在目标位置之间共享与 UI 相关的数据。 - 对话框目标位置:现在,您可以创建
<dialog>
目标位置,当您navigate
到这些目标位置时,这些目标位置将显示一个DialogFragment
。NavHostFragment
默认支持对话框目标位置。有关更多信息,请参阅 从 DialogFragment 创建目标位置。 - 通过 Uri 导航:您现在可以使用
Uri
进行navigate
操作,这将使用您添加到目标位置的<deepLink>
导航到该位置。有关更多信息,请参阅 使用 Uri 导航。 - NavHostController:专门用于构建自定义
NavHost
的 API 已移至NavHostController
,允许实现将其NavController
连接到托管的LifecycleOwner
、OnBackPressedDispatcher
和ViewModelStore
。
版本 2.1.0-rc01
2019 年 8 月 7 日
androidx.navigation:navigation-*:2.1.0-rc01
已发布。此版本中包含的提交可以在这里找到 这里。
API 变更
- 已删除在
2.1.0-alpha02
中引入的NavController
上已弃用的getViewModelStore()
API。(aosp/1091021)
版本 2.1.0-beta02
2019 年 7 月 19 日
androidx.navigation:*:2.1.0-beta02
已发布。此版本中包含的提交可以在这里找到 这里。
错误修复
- 删除了在
2.1.0-beta01
中引入的意外 jacoco 依赖项。(b/137782950)
版本 2.1.0-beta01
2019 年 7 月 17 日
androidx.navigation:*:2.1.0-beta01
已发布。此版本中包含的提交可以在这里找到 这里。
新功能
- 使用
setupWithNavController()
和Toolbar
或CollapsingToolbarLayout
时,NavigationUI
现在会为向上按钮的移除添加动画。(b/131403621)
错误修复
- 修复了在使用具有相同容器的多个 NavHostFragment 时,使用
findNavController()
出现的计时问题。(b/136021571)
版本 2.1.0-alpha06
2019 年 7 月 2 日
androidx.navigation:*:2.1.0-alpha06
已发布。此版本中包含的提交可以在这里找到 这里。
新功能
- NavHostFragment 使用的
app:navGraph
属性现已移至navigation-runtime
工件。可以通过 XML 添加的自定义导航器应使用此属性才能与导航编辑器的 Host 面板集成。(b/133880955)
API 变更
NavController
上的getViewModelStore()
API 已弃用,取而代之的是返回ViewModelStoreOwner
的新getViewModelStoreOwner()
方法。(aosp/987010)- 浮动窗口目标位置(例如
<dialog>
目标位置)的实现已泛化为一个标记接口FloatingWindow
,所有<dialog>
目标位置现在都实现了该接口。与顶部应用栏交互的 NavigationUI 方法现在会忽略FloatingWindow
目标位置。(b/133600763)
行为变更
- 使用
<dialog>
目标位置时,Navigation 现在可以正确地使其状态与屏幕上显示的内容保持同步。因此,当您导航到非对话框和非活动目标位置(例如<fragment>
目标位置)时,Navigation 现在会自动弹出<dialog>
目标位置。(b/134089818)
错误修复
- 处理深层链接时,Navigation 现在会抑制处理活动重新创建时出现的动画,从而修复了视觉闪烁问题。(b/130362979)
- 修复了在添加初始片段时弹出片段后回退栈不同步的错误。(b/133832218)
版本 2.1.0-alpha05
2019 年 6 月 5 日
androidx.navigation:*:2.1.0-alpha05
已发布。此版本中包含的提交可以在这里找到 这里。
API 变更
NavController
上与主机相关的 API 已重命名并移至NavController
的新子类NavHostController
。(aosp/966091)NavController
的setHostOnBackPressedDispatcherOwner()
方法已替换为NavHostController
的setOnBackPressedDispatcher()
方法,现在要求您在调用它之前调用setLifecycleOwner()
。(aosp/965409)NavHostController
现在包含一个enableOnBackPressed(boolean)
方法,该方法替换了以前由setHostOnBackPressedDispatcherOwner()
返回的NavHostOnBackPressedManager
类。(aosp/966091)
错误修复
- 修复了通过 URI 导航后回退栈不正确的问题。(b/132509387)
NavController
自动处理的深层链接现在只会触发一次。(b/132754763)
版本 2.1.0-alpha04
2019 年 5 月 16 日
androidx.navigation:*:2.1.0-alpha04
已发布。此版本中包含的提交可以在这里找到 这里。
错误修复
NavHostFragment
在拦截系统后退按钮事件时正确遵守app:defaultNavHost
,修复了 Navigation2.1.0-alpha03
中的回归问题。b/132077777DialogFragmentNavigator
现在可以正确处理popBackStack()
和navigateUp()
操作。b/132576764- 修复了在反复在嵌套图之间导航时出现的
IllegalStateException: unknown destination during restore
问题。b/131733658
版本 2.1.0-alpha03
2019 年 5 月 7 日
androidx.navigation:*:2.1.0-alpha03
已发布。此版本中包含的提交可以在这里找到 这里。
已知问题
- 即使使用
app:defaultNavHost="false"
,NavHostFragment 也会继续拦截系统后退按钮 b/132077777
新功能
- 现在,您可以创建
<dialog>
目标位置,当您navigate
到这些目标位置时,这些目标位置将显示一个DialogFragment
。NavHostFragment
默认支持对话框目标位置。b/80267254 - 除了使用资源 ID 或
NavDirections
实例调用navigate
之外,您现在还可以通过Uri
进行导航,这将使用您添加到目标位置的<deepLink>
导航到正确的目标位置。b/110412864
行为变更
- NavigationUI 提供的默认动画速度已从 400ms 加快到 220ms,以匹配 Activity 和 Fragment 的默认动画速度。b/130055522
API 变更
NavHostFragment
的createFragmentNavigator()
方法已弃用,其功能已移至新的onCreateNavController()
方法,使其更清晰地表明这是在子类化NavHostFragment
时添加自定义导航器的正确入口点。b/122802849- 已向
NavDestination
添加了一个hasDeepLink()
方法,允许您检查给定的Uri
是否可以由该目标处理,或者在NavGraph
的情况下,是否可以由导航图中的任何目标处理。b/117437718
错误修复
- 现在将默认参数正确传递给
OnDestinationChangedListener
实例。b/130630686 NavHostFragment
现在使用OnBackPressedDispatcher
拦截系统返回事件,修复了在返回 Fragment 时在 Fragment 生命周期方法中进行条件导航时的错误。b/111598096- 对于 Safe Args,现在可以正确推断具有未指定
app:argType
的android:defaultValue=”@null”
为string
参数。b/129629192
2.1.0-alpha02 版本
2019 年 4 月 3 日
已发布 androidx.navigation:*:2.1.0-alpha02
。此版本中包含的提交可以在这里找到 这里。
新功能
- 现在,您可以通过 Kotlin 用户的
by navGraphViewModels()
属性委托或使用添加到NavController
的getViewModelStore()
API 创建在导航图级别作用域的 ViewModel。b/111614463
API 变更
- 现在,您可以向
<activity>
目标添加app:targetPackage
以限制匹配的包名。它支持app:targetPackage="${applicationId}"
用于将包限制为您自己的应用程序 ID。b/110975456
错误修复
- 不再在加载时将
<activity>
目标的android:name
解析为类,从而防止在使用动态功能时出现 ClassNotFoundException。b/124538597
2.1.0-alpha01 版本
2019 年 3 月 19 日
这是 Navigation 2.1.0
的第一个 alpha 版本。
依赖项更改
- Navigation 现在依赖于
androidx.core:core:1.0.1
和androidx.fragment:fragment:1.1.0-alpha05
。此版本还删除了对androidx.legacy:legacy-support-core-utils:1.0.0
的依赖。b/128632612
API 变更
- 已添加一个新的
Navigation.createNavigateOnClickListener(NavDirections)
方法,作为使用资源 ID 和 Bundle 创建点击监听器的替代方法。b/127631752 FragmentNavigator.instantiateFragment
现在已弃用。默认实现现在使用FragmentFactory
来实例化 Fragment。b/119054429
错误修复
- 当目标附加参数时,Navigation 不再发送空
Bundle
,修复了使用android:defaultValue="@null"
时的错误。b/128531879 - Safe Args 现在依赖于 KotlinPoet 1.1.0,修复了极长包名的问题。b/123654948
2.0.0 版本
2.0.0 版本
2019 年 3 月 14 日
Navigation 2.0.0
已发布,与 2.0.0-rc02
没有区别。
2.0.0-rc02 版本
2019 年 3 月 6 日
Navigation 2.0.0-rc02 提供了具有 androidx.navigation
组 ID 的新构件,并将其依赖项更改为 AndroidX 等效项。
2.0.0-rc02 的行为与 Navigation 1.0.0-rc02 的行为相同,除了更新依赖项以匹配 新的依赖项 外,不需要对您的代码进行任何更改即可从 1.0.0-rc02 更新。
您的项目必须已迁移到 AndroidX才能使用 2.X 版本的 Navigation。Navigation 1.0 稳定版将是使用 Support Library 依赖项的最后一个版本;1.0 之后的未来所有开发都将基于 AndroidX 并基于 2.0 稳定版构建。
AndroidX 之前的依赖项
对于 Navigation 的 AndroidX 之前的版本,请包含这些依赖项
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
}
对于 Safe args,请在您的顶级 build.gradle
文件中添加以下 **classpath**
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
1.0.0 版本
1.0.0 版本
2019 年 3 月 14 日
Navigation 1.0.0
已发布,与 1.0.0-rc02
没有区别。
1.0.0-rc02 版本
2019 年 2 月 26 日
这是 Navigation 1.0.0 稳定版本的第二个候选版本。此版本包含许多错误修复。
错误修复
- 修复了如果根图没有 ID,则会忽略
popBackStack()
的问题 b/126251695 navigateUp()
现在在处理没有FLAG_ACTIVITY_NEW_TASK
的深层链接后调用时,可以正确处理导航回应用程序的任务 b/126082008- 修复了
ActivityNavigator.applyPopAnimationsToPendingTransition
未应用正确的弹出退出动画的问题 b/126237567 - Safe Args 生成的 Kotlin 代码现在可以正确转义 Kotlin 关键字(例如
in
和fun
)以及与R
类关联的包名。b/126020455
1.0.0-rc01 版本
2019 年 2 月 21 日
这是 Navigation 1.0.0 稳定版本的候选版本。此版本包含一个错误修复。
错误修复
- 修复了使用 Fragment 和
singleTop
导航操作时出现的问题 b/124294805
1.0.0-beta02 版本
2019 年 2 月 12 日
此版本包含许多次要改进和重要的错误修复。
新功能
- 您现在可以使用
0
作为reference
参数的android:defaultValue
。b/124248602
行为变更
- 现在,精确的深层链接匹配优先于具有
.*
或参数匹配的深层链接。b/123969518
错误修复
popBackStack()
和navigateUp
现在在弹出返回堆栈上的最后一个目标时正确返回false
,修复了在1.0.0-beta01
中引入的回归。b/123933201- Navigation 现在在恢复保存的实例状态期间正确设置
ClassLoader
,避免在使用Navigator
保存的状态中的自定义类或发送到NavDestination
的参数时出现问题。b/123893858 - Safe Args 生成的 NavArgs 类在从保存的实例状态恢复
Parcelable[]
参数时不再崩溃。b/123963545 - Safe Args 现在可以正确清理不必要的生成的 Kotlin 类。b/124120883
1.0.0-beta01 版本
2019 年 2 月 4 日
这是 Navigation 的第一个 Beta 版本;展望未来,除非出现严重问题,否则 Navigation API 预计将保持稳定,直到下一个版本。此版本包含一些错误修复和行为更改。
行为变更
- Navigation 现在确保在运行时和通过 Safe Args 对参数默认值进行相同的处理。因此,只有具有
app:argType="reference"
的参数才能具有指向另一个资源的默认值(例如,@color/colorPrimary
)。尝试对具有不同app:argType
的 reference 默认值使用将导致在解析导航 XML 时出现异常。b/123551990 - Safe Args 现在依赖于 Android Gradle Plugin 3.3.0 aosp/888413
- Safe Args 现在依赖于 Kotlin 1.3.20 aosp/888414
错误修复
- Safe Args 现在可以在所有版本的 Android Gradle Plugin 上的库和功能模块中使用。b/121304903
- 修复了一个回归,该回归会导致单个
popBackStack()
操作从返回堆栈顶部弹出目标的所有副本,而不是一次只弹出单个目标。b/123552990 - 修复了
FragmentNavigator
状态与NavController
的状态不同步的问题,这会在尝试恢复返回堆栈时导致IllegalStateException
。b/123803044 - 修复了使用 ProGuard 进行混淆时不会显示
NavigationUI
处理的返回箭头的问题。b/123449431 - Safe Args 生成的代码现在可以正确处理使用指向静态内部类的
app:argType
,格式为.OuterClass$InnerClass
。b/123736741 - Safe Args 生成的 Java 代码现在可以正确处理全局操作和深度嵌套的目标。b/123347762
1.0.0-alpha11 版本
2019 年 1 月 23 日
这是 1.0.0-alpha10
的一个修补程序版本,它修复了 Safe Args 的一个问题。
错误修复
- 修复了 Safe Args 无法导入与全局操作关联的 Directions 类的错误。b/123307342
版本 1.0.0-alpha10
2019 年 1 月 23 日
已知问题
- Safe Args 无法导入与全局操作关联的 Directions 类。b/123307342
此版本包含重大 API 更改;请参阅下面的“重大更改”部分。
新功能
- Kotlin 用户现在可以使用
by navArgs()
属性委托在Activity
或Fragment
中延迟获取对 Safe Args 生成的NavArgs
类的引用。b/122603367 - Safe Args 现在允许您通过应用
androidx.navigation.safeargs.kotlin
插件来生成 Kotlin 代码。Kotlin 代码是专门为仅 Kotlin 模块构建的,使用默认参数和不可变类而不是仍然可通过之前的androidx.navigation.safeargs
插件获得的构建器模式。b/110263087
行为更改
- 匹配的深层链接现在偏向于具有最多匹配参数的深层链接。b/118393029
- 现在,在
NavController
上调用setGraph()
将重置返回栈。b/111450672 - 未知深层链接不再抛出
IllegalStateException
,而是被忽略,从而修复了嵌套或多个NavHostFragment
的问题。b/121340440
重大变更
- 用于将弹出动画应用于 Activity 的
NavOptions.applyPopAnimationsToPendingTransition()
方法已移至ActivityNavigator
。b/122413117 - Safe Args 现在避免为没有参数的操作复制相同的类。生成的 NavDirections 类中无参数方法的返回类型现在为
NavDirections
。b/123233147 - Safe Args 生成的 Directions 类不再具有公共构造函数 - 您应该只与生成的静态方法交互。b/123031660
- Safe Args 生成的
NavDirections
类不再具有公共构造函数 - 它们应该只通过生成的 Directions 类中的静态方法生成。b/122963206 NavDirections
的getArguments()
返回的Bundle
现在标记为@NonNull
而不是@Nullable
。b/123243957
错误修复
NavDeepLinkBuilder
现在通过使用您传入的参数来确定唯一性,从而正确处理对同一目标的多个同时PendingIntent
。b/120042732NavController
现在在使用嵌套的NavHostFragment
或其他具有返回栈的子片段时,正确处理popBackStack()
操作。b/122770335NavigationUI
现在正确设置向上按钮的内容描述。b/120395362- Safe Args 生成的 Directions 类现在可以正确处理其 ID 与目标上的操作 ID 相同的全局操作。b/122962504
- Safe Args 生成的
NavDirections
类现在在equals()
返回 true 时具有相等的hashCode()
值。b/123043662 FragmentNavigator
现在会在您尝试对NavHostFragment
的FragmentManager
执行自定义FragmentTransactions
时抛出一个更好的错误消息。您应该始终使用getChildFragmentManager()
。b/112927148
版本 1.0.0-alpha09
2018年12月18日
此版本包含重大 API 更改;请参阅下面的“重大更改”部分。
我们选择不再继续开发 android.arch.navigation:navigation-testing
工件。虽然它已被证明有助于内部测试 NavController
,但我们强烈建议使用替代的测试策略,例如模拟 NavController
实例以验证是否正在进行正确的 navigate()
调用。这种方法在AndroidDevSummit 2018 的单 Activity 演讲中进行了详细讨论,我们将致力于编写更多关于使用 Navigation 进行测试的文档。
新功能
- 具有
menuCategory="secondary"
的MenuItem
在与NavigationUI
方法一起使用时,将不再弹出返回栈。b/120104424 AppBarConfiguration
现在允许您设置一个回退OnNavigateUpListener
实例,当navController.navigateUp()
返回false
时将调用该实例。b/79993862 b/120690961
重大变更
- 当使用具有
argType="reference"
的<argument>
时,Navigation 不再解析引用,而是提供原始资源 ID 本身。b/111736515 onNavDestinationSelected()
现在默认情况下会返回到导航图的起始目标,使其与setup
方法保持一致。将menuCategory="secondary"
添加到您的MenuItem
以避免弹出返回栈。aosp/852869- 生成的
Args
类的fromBundle()
方法现在采用非空Bundle
而不是可空Bundle
aosp/845616
错误修复
- 参数现在从深层链接中正确解析为正确的
argType
,而不是始终作为字符串 b/110273284 - Navigation 现在可以正确导出其公共资源 b/121059552
- Safe Args 现在与 Android Gradle Plugin 3.4 Canary 4 及更高版本兼容 b/119662045
版本 1.0.0-alpha08
2018年12月6日
此版本包含重大 API 更改;请参阅下面的“重大更改”部分。
新功能
- 目标标签在与
NavigationUI
方法一起使用时,现在将自动替换{argName}
实例在您的android:label
中的正确参数 b/80267266 - Navigation 现在依赖于 Support Library 28.0.0 b/120293333
重大变更
OnNavigatedListener
已重命名为OnDestinationChangedListener
b/118670572OnDestinationChangedListener
现在还传递参数的Bundle
aosp/837142app:clearTask
和app:launchDocument
属性及其关联的方法已被删除。使用app:popUpTo
和您的图的根来删除返回栈中的所有目标。b/119628354ActivityNavigator.Extras
现在使用Builder
模式并添加了设置任何Intent.FLAG_ACTIVITY_
标志的功能 aosp/828140NavController.onHandleDeepLink
已重命名为handleDeepLink
aosp/836063- 许多不适合子类化的类和方法,例如
NavOptions
、NavInflater
、NavDeepLinkBuilder
和AppBarConfiguration
,已被设为final
aosp/835681 - 已删除不推荐使用的
NavHostFragment.setGraph()
方法 aosp/835684 - 已删除不推荐使用的
NavigationUI.navigateUp(DrawerLayout, NavController)
方法。aosp/835684 - 片段创建已移至
FragmentNavigator
,从而更容易将片段创建委托给FragmentFactory
。b/119054429 NavGraphNavigator
的构造函数不再采用Context
aosp/835340- NavigatorProvider 现在是一个类,而不是一个接口。
getNavigatorProvider()
返回的NavigatorProvider
并未更改其功能。aosp/830660 NavDestination.navigate()
已被删除。改为在Navigator
上调用navigate()
。aosp/830663- 对
Navigator
进行了重大重构,无需OnNavigatorNavigatedListener
,而是让navigate
返回已导航到的NavDestination
。 Navigator
实例不再可以向NavController
发送弹出事件。考虑使用OnBackPressedCallback
来拦截后退按钮按下并调用navController.popBackStack()
。aosp/833716
错误修复
popUpTo
现在在目标是<navigation>
元素时可以一致地工作 b/116831650- 修复了若干错误,这些错误在使用嵌套图时会导致
IllegalArgumentException
b/118713731 b/113611083 b/113346925 b/113305559 <activity>
目标的dataPattern
属性现在将通过调用toString()
来填充非字符串参数的参数 b/120161365
Safe Args
- Safe Args 支持 Serializable 对象,包括 Enum 值。Enum 类型可以通过使用枚举文字而不使用类名来设置默认值(例如
app:defaultValue="READ"
) b/111316353 - Safe Args 支持所有受支持类型数组 b/111487504
- Safe Args 现在忽略资源目录的子文件夹 b/117893516
- Safe Args 在适当的地方添加了
@Override
注释 b/117145301
版本 1.0.0-alpha07
2018年10月29日
新功能
- 新的AppBarConfiguration 类允许您自定义哪些目标被认为是顶级目标。详情请参见更新后的文档。b/117333663
- 您现在可以将参数传递给图的起始目标 b/110300470
- 深度链接现在支持包含句点、连字符和加号的自定义方案。b/112806402
重大变更
navigation-testing-ktx
模块已合并到navigation-testing artifact
中,并将不再发布。navigation-testing
artifact 现在依赖于 Kotlin 标准库。API 已更改为与 Kotlin 约定更一致,但您仍可以将其用于用 Java 编写的测试。- 不再支持在清单中注册的元数据导航图。b/118355937
- 操作不再可以附加到<activity> 目标。aosp/785539
错误修复
- 深度链接现在可以正确解析查询参数。b/110057514
- Activity 目标现在可以正确应用所有进入和退出动画。b/117145284
- 修复了在使用自定义导航器时配置更改后发生的崩溃问题。b/110763345
Safe Args
- Safe Args 现在对 Android Gradle Plugin 3.2.1 有一个固定的依赖项。b/113167627
- 现在可以为内部类生成 Directions。b/117407555
- 修复了生成指向<include> 图的 Directions 的问题。b/116542123
版本 1.0.0-alpha06
2018年9月20日
新功能
- 现在支持 Fragment 和 Activity 目标的共享元素过渡 b/79665225。更多信息,请参见使用导航架构组件实现导航
- 现在,选择
NavigationView
中的项目将关闭任何包含的底部工作表 b/112158843
API 变更
- 重大更改:Navigator
navigate()
方法现在采用Navigator.Extras
参数。 - NavController 的
getGraph()
方法现在为NonNull
b/112243286
错误修复
NavigationUI.setupWithNavController()
如果与各个目标的视图一起使用,则不再泄漏视图 b/111961977- Navigator
onSaveState()
现在只调用一次 b/112627079
Safe Args
- 如果存在,导航目标 Directions 类现在扩展其父级的 Directions 类 b/79871405
- Directions 和 Args 类现在具有有用的
toString()
实现 b/111843389
版本 1.0.0-alpha05
2018年8月10日
错误修复
- 修复导致回退堆栈行为不正确的错误。b/111907708
- 修复生成的 Args 类中
equals()
的错误。b/111450897 - 修复 Safe Args 中的构建失败。b/109409713
- 修复从资源标识符到 Java 名称的转换 b/111602491
- 修复 Safe Args 插件中关于可空性的错误消息。
- 添加缺少的可空性注释。
版本 1.0.0-alpha04
2018年7月19日
Navigation 1.0.0-alpha04
和相关的 Safe Args gradle 插件包含许多 API 更改、行为更改和错误修复。
API/行为更改
- NavHostFragment 将始终将当前 Fragment 设置为主导航 Fragment,确保在弹出外部 NavController 之前弹出子 Fragment 管理器 b/111345778
Safe Args
- 重大更改:
app:type
已更改为app:argType
以避免与其他库(例如 ConstraintLayout 2.0.0-alpha1)发生冲突 b/111110548 - Safe Args 的错误消息现在可点击 b/111534438
- Args 类现在确认
NonNull
属性实际上不为空 b/111451769 - 已向 NavDirections 和 Args 生成的类添加其他
NonNull
注释 b/111455455 b/111455456
错误修复
- 修复了深度链接到 Fragment 目标后系统后退按钮的问题 b/111515685
版本 1.0.0-alpha03
2018年7月12日
Navigation 1.0.0-alpha03
和相关的 Safe Args gradle 插件包含许多 API 更改、行为更改和错误修复。
API/行为更改
- 已添加用于 Toolbar 的 NavigationUI.setupWithNavController 方法 b/109868820
- 已添加用于 CollapsingToolbarLayout 的 NavigationUI.setupWithNavController 方法 b/110887183
- 当回退堆栈为空或给定的目标 ID 不在回退堆栈中时,popBackStack() 现在返回 false b/110893637
- FragmentNavigator 现在忽略 FragmentManager 保存状态后的导航操作,避免“onSaveInstanceState 后无法执行此操作”异常 b/110987825
Safe Args
- 重大更改:操作和参数名称中的非字母数字字符将在相应的 NavDirections 方法名称中替换为驼峰式命名法
- 例如,
DemoController.index
将变为setDemoControllerIndex
b/79995048 - 例如,
action_show_settings
将变为actionShowSettings
b/79642240
- 例如,
- 重大更改:现在默认情况下参数被认为是非空的。要允许字符串和可打包参数为空值,请添加
app:nullable="true"
b/79642307 - 您现在可以使用
app:type="long"
和形式为“123L”的 defaultValues b/79563966 - 现在支持可打包参数,使用完整限定的类名作为
app:type
。唯一支持的默认值是"@null"
b/79563966 - Args 类现在实现
equals()
和hashCode()
b/79642246 - Safe Args 插件现在可以应用于库项目 b/80036553
- Safe Args 插件现在可以应用于功能项目 b/110011752
错误修复
- 修复了在 Fragment 生命周期方法期间导航时出现的问题 b/109916080
- 修复了多次通过嵌套图导航时出现的问题 b/110178671
- 修复了使用
setPopUpTo
和图中的第一个目标时出现的问题 b/109909461 - 修复了所有
app:defaultValue
值都作为字符串传递的问题 b/110710788 - Android Gradle Plugin 3.2 Beta 01 捆绑的 aapt2 现在为 Navigation XML 文件中的每个
android:name
属性添加保留规则 b/79874119 - 修复了替换默认 FragmentNavigator 时发生的内存泄漏 b/110900142
1.0.0-alpha02 版本
2018年6月7日
行为更改
FragmentNavigator
现在使用setReorderingAllowed(true)
。b/109826220导航现在对从深度链接 URL 解析的参数进行 URL 解码。b/79982454
错误修复
修复了从 Fragment 生命周期方法调用 navigate 时发生的
IllegalStateException
。b/79632233导航现在依赖于 Support Library 27.1.1 来修复使用动画时的闪烁问题。b/80160903
修复了使用 defaultNavHost="true" 作为子 Fragment 时发生的
IllegalArgumentException
。b/79656847修复了使用 NavDeepLinkBuilder 时发生的
StackOverflowError
。b/109653065修复了导航回嵌套图时发生的
IllegalArgumentException
。b/80453447修复了使用
launchSingleTop
时 Fragment 重叠的问题。b/79407969导航现在为嵌套图构建正确的合成回退堆栈。b/79734195
使用嵌套图作为
MenuItem
时,NavigationUI 现在将突出显示正确的项目。b/109675998
API 变更
操作的
clearTask
属性和NavOptions
中的关联 API 已弃用。b/80338878操作的
launchDocument
属性和NavOptions
中的关联 API 已弃用。b/109806636
1.0.0-alpha01 版本
2018年5月8日
导航 提供了一个构建应用内导航的框架。此初始版本为 1.0.0-alpha01
。