Navigation
下表列出了 androidx.navigation
组中的所有工件。
工件 | 当前稳定版 | 下一候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
navigation-* | 2.3.2 | - | - | - |
navigation-compose | - | - | - | 1.0.0-alpha05 |
声明依赖项
如需添加 Navigation 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
dependencies { def nav_version = "2.3.2" // Java language implementation implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Kotlin implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" // Feature module Support implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:1.0.0-alpha04" }
Safe Args
如需将 Safe Args 添加到您的项目中,请在顶层 build.gradle
文件中包含以下 classpath
:
buildscript { repositories { google() } dependencies { def nav_version = "2.3.2" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
您还必须应用以下两个可用插件之一。
如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块的 build.gradle
文件中:
apply plugin: "androidx.navigation.safeargs"
此外,如需生成适用于 Kotlin 独有的模块的 Kotlin 代码,请添加以下行:
apply plugin: "androidx.navigation.safeargs.kotlin"
根据迁移到 AndroidX 文档,您的 gradle.properties
文件中必须具有 android.useAndroidX=true
。
如需了解如何使用 Kotlin 扩展,请参阅 ktx 文档。
如需详细了解依赖项,请参阅添加构建依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对库的改进有某些建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
Navigation Compose 版本 1.0.0
版本 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 现已支持使用 popUpTo 和 launchSingleTop 操作所需的 NavOptions(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 Component 和 Jetpack Compose,且在应用中将 @Composable
函数作为目标函数。
其初始版本包含以下功能:
NavHost
可组合项允许您通过 Kotlin DSL 构建导航图表。- 可在目标函数级别对生命周期、
ViewModel
和记忆状态进行限定。 - 自动与系统的返回按钮集成。
- 可传递参数、将深层链接附加到目标函数以及将结果返回到前一个目标函数。
rememberNavController()
和currentBackStackEntryAsState()
中特定于 Compose 的帮助程序可提升状态并将NavController
连接到NavHost
以外的可组合项(例如底部的导航栏)。
如需了解详情,请参阅 Compose Navigation 指南。
版本 2.3.2
Navigation 版本 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)
- 除了对 Fragment 层次结构和 Fragment 的视图层次结构的现有检查以外,
NavHostFragment.findNavController(Fragment)
现在还会检查 DialogFragment 的 root decor 视图。这样,您便可以通过FragmentScenario
和Navigation.setViewNavController()
测试使用 Navigation 的对话框 Fragment。(I69e0d)
版本 2.3.1
版本 2.3.1
2020 年 10 月 14 日
发布了 androidx.navigation:navigation-*:2.3.1
。版本 2.3.1 中包含这些提交内容。
新功能
- 默认 Animator 资源已添加到 Navigation UI,建议使用该资源,而不是默认动画资源。(b/167430145)
- NavOptions 现在替换了哈希代码和 equals 方法 (b/161586466)
- 现在 Navigation 会在“无带 ID 的目标”IllegalArgumentException 中包含当前目标,这应该会改进开发者的调试体验。(b/168311416)
问题修复
- Safe Args 将不再封装返回行,即使生成的参数类名称的长度超过 100 个字符也是如此。(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
,可用于设置当前目标并在导航操作后验证返回堆栈。如需了解详情,请参阅测试导航。 - 返回结果:现在,通过与 Navigation 返回堆栈中的每个目标相关联的
NavBackStackEntry
,您可以使用SavedStateHandle
,它适用于存储少量应与特定返回堆栈条目相关联的已保存状态。如需了解详情,请参阅向上一个目的地返回结果。 - 对
Openable
的NavigationUI
支持:使用NavigationUI
中DrawerLayout
的所有情况都已替换为使用更通用的Openable
接口,该接口已添加到 CustomView1.1.0
中,并由DrawerLayout
在 DrawerLayout1.1.0
中实现。 - 深层链接中的操作和 MIME 类型支持:深层链接现已经过扩展,除了之前可用的
app:uri
之外,还支持app:action
和app:mimeType
。NavController
现在支持通过新的NavDeepLinkRequest
类按这些字段的任意组合进行导航。如需了解详情,请参阅使用 NavDeepLinkRequest 导航。
已知问题
- 清单合并尚不提供对深层链接操作和 MIME 类型的支持。在提供支持之前,从清单的
<nav-graph>
元素生成的任何<intent-filter>
元素都不会在其<data>
元素或您的自定义<action>
中包含您的 MIME 类型。您必须手动在清单中添加相应的<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:uri
之外,还支持app:action
和app:mimeType
。NavController 现在支持通过新的NavDeepLinkRequest
类按这些字段的任意组合进行导航。(b/136573074、b/135334841)
API 变更
- 极大地扩展了对 Dynamic Navigation 目标的 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
,只需在点后为applicationId
添加moduleName
后缀,系统即会使用默认的软件包。如果您需要自定义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) - Dynamic Navigation 现在依赖于 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 的功能模块 Activity 和 Fragment 目标的支持。(b/148969800)
API 变更
DynamicExtras
类不再使用构建器模式,现在可以直接构建。(aosp/1253671)- 现在,
DynamicActivityNavigator
可以在其构造函数(而非Activity
)中获取Context
。(aosp/1250252)
问题修复
NavigationUI
不再忽略空标签(即包含android:label=””
的目的地),现在可以正确将标题设置为空字符串。(b/148679860)
依赖项更新
- Navigation Dynamic Features 工件现在依赖于 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
接口(从 DrawerLayout1.1.0-alpha04
开始,DrawerLayout
会实现该接口),从而允许您将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)
依赖项变更
- Navigation 现在依赖于 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
类。该类提供了测试 Navigation 时使用模拟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
开始:更新了DrawerArrowDrawable
的navigation-ui
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) - 更新了
DrawerArrowDrawable
的navigation-ui
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
除了提供用于启动该目标的参数,还提供 Navigation 驱动的LifecycleOwner
、ViewModelStoreOwner
(与NavController.getViewModelStoreOwner()
返回的相同)和SavedStateRegistryOwner
。 - Lifecycle ViewModel SavedState 集成:现在将
by navGraphViewModels()
或ViewModelProvider
构造函数与NavController.getBackStackEntry()
或NavController.getViewModelStoreOwner()
返回的ViewModelStoreOwner
一起使用时,会使用SavedStateViewModelFactory
作为默认出厂设置。 - 深层链接的查询参数支持:具有查询参数的深层链接现在支持重新排序的查询参数;现在在匹配深层链接时,具有默认值或可为 null 的参数为可选参数。
- 改进了动画支持:
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) - 现在,如果将
NavHostFragment
与FragmentContainerView
配合使用,前者可在配置发生更改后正确恢复图表。(b/143752103)
依赖项变更
- Navigation 现在会视情况依赖于 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 中包含这些提交内容。
依赖项变更
- Navigation 现在依赖于 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
。版本 1.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
。点击此处可查看此版本中包含的提交内容。
新功能
- 具有查询参数的深层链接现在支持重新排序的查询参数;匹配深层链接时,具有默认值或可为 null 的参数现在是可选的。(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
。点击此处可查看此版本中包含的提交内容。
新功能
SavedStateViewModelFactory
现在是将by navGraphViewModels()
或ViewModelProvider
构造函数与NavController.getViewModelStoreOwner()
返回的ViewModelStoreOwner
一起使用时所用的默认出厂设置。(b/135716331)
API 变更
- 从 Navigation
2.1.0-rc01
开始:移除了2.1.0-alpha02
中引入的NavController
上已弃用的getViewModelStore()
API。(aosp/1091021)
问题修复
NavHostFragment
现在使用FragmentContainerView
,修复了动画 z 排序问题以及分派给 Fragment 的窗口边衬区的问题。(b/137310379)
版本 2.1.0
版本 2.1.0
2019 年 9 月 5 日
发布了 androidx.navigation:navigation-*:2.1.0
。点击此处可查看此版本中包含的提交内容。
自 2.0.0 以来的重要变更
- 将 ViewModel 范围限定为导航图表:您现在可以通过针对使用
-ktx
库的 Kotlin 用户的by navGraphViewModels()
属性委派或使用添加到NavController
的getViewModelStoreOwner()
API,创建在导航图表级别限定范围的 ViewModel。如需了解详情,请参阅在目标之间共享与界面相关的数据。 - dialog 目标:您现在可以创建
<dialog>
目标,当您navigate
到这些目标时,系统会显示DialogFragment
。NavHostFragment
默认支持 dialog 目标。如需了解详情,请参阅从 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)
问题修复
- 修复了通过
findNavController()
使用具有相同容器的多个 NavHostFragment 时出现的时间问题。(b/136021571)
版本 2.1.0-alpha06
2019 年 7 月 2 日
发布了 androidx.navigation:*:2.1.0-alpha06
。点击此处可查看此版本中包含的提交内容。
新功能
- NavHostFragment 使用的
app:navGraph
属性现在已移至navigation-runtime
工件。可通过 XML 添加的自定义导航器应使用此属性与导航编辑器的“托管方”面板相集成。(b/133880955)
API 变更
- 弃用了
NavController
上的getViewModelStore()
API,转为使用新的getViewModelStoreOwner()
方法,该方法可返回ViewModelStoreOwner
。(aosp/987010) - 浮动窗口目标(例如
<dialog>
目标)的实现已泛化为标记接口FloatingWindow
,现在所有<dialog>
目标都可以实现该接口。用于与顶部应用栏交互的 NavigationUI 方法现在会忽略FloatingWindow
目标。(b/133600763)
行为变更
- Navigation 现在可以正确地使其状态与使用
<dialog>
目标时屏幕上显示的状态保持同步。因此,当您导航到非 dialog 和非 activity 目标(例如<fragment>
目标)时,Navigation 现在会自动弹出<dialog>
目标。(b/134089818)
问题修复
- Navigation 现在可以禁止在处理深层链接时重新创建 Activity 时出现的动画,从而修复了视觉闪烁问题。(b/130362979)
- 修复了由于添加了初始片段而弹出 Fragment 时,Navigation 返回堆栈会不同步的问题。(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/132077777 DialogFragmentNavigator
现在可以正确处理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
默认支持 dialog 目标。b/80267254 - 除了使用资源 ID 或
NavDirections
实例调用navigate
之外,您现在还可以通过Uri
进行导航,它使用您已添加到目标的<deepLink>
导航到相应的目标。b/110412864
行为变更
- NavigationUI 提供的默认动画已从 400 毫秒缩短到 220 毫秒,以匹配 Activity 和 Fragment 的默认动画速度。b/130055522
API 变更
- 弃用了
NavHostFragment
的createFragmentNavigator()
方法,并且其功能已移至新的onCreateNavController()
方法,以便您更清楚地了解,这是创建子类NavHostFragment
时添加自定义导航器的正确入口点。b/122802849 - 将
hasDeepLink()
方法添加到了NavDestination
,以便检查给定的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 变更
- 您现在可以将
app:targetPackage
添加到<activity>
,以限制匹配的软件包名称。它支持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 和套装创建点击监听器的方法。b/127631752 - 已弃用
FragmentNavigator.instantiateFragment
,默认实现现在使用FragmentFactory
来实例化 Fragment。b/119054429
问题修复
- 有附加到目标的参数时,Navigation 不再发送 null
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 才能使用 Navigation 的 2.X 版本。Navigation 1.0 稳定版将是最后一个使用支持库依赖项的版本;1.0 以后的所有未来开发都将基于 AndroidX,并以 2.0 稳定版为基础进行构建。
AndroidX 之前的依赖项
对于 AndroidX 之前的 Navigation 版本,请添加以下依赖项:
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
文件中添加以下类路径
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 - 在处理没有
FLAG_ACTIVITY_NEW_TASK
的深层链接后调用navigateUp()
时,它现在可以正确处理导航回应用的任务这一行为 b/126082008 - 修复了
ActivityNavigator.applyPopAnimationsToPendingTransition
无法应用正确的弹出退出动画的问题 b/126237567 - 由 Safe Args 生成的 Kotlin 代码现在可以正确转义 Kotlin 关键字,例如与
R
类相关联的软件包名称中的in
和fun
。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 - 从保存的实例状态恢复
Parcelable[]
参数时,Safe Args 生成的 NavArgs 类不再崩溃。b/123963545 - Safe Args 现在可以正确清理不必要生成的 Kotlin 类。b/124120883
版本 1.0.0-beta01
2019 年 2 月 4 日
这是 Navigation 的第一个测试版;今后,Navigation API 会在推出下一个版本之前一直保持稳定(除非出现严重问题)。此版本修复了一些问题并更改了一些行为。
行为变更
- Navigation 现在可以确保参数默认值在运行时以及通过 Safe Args 得到相同的处理。因此,仅
app:argType="reference"
的参数可具有指向其他资源的默认值(例如@color/colorPrimary
)。解析 Navigation XML 时,尝试使用app:argType
不同的引用默认值会导致出现异常。b/123551990 - Safe Args 现在依赖于 Android Gradle 插件3.3.0 aosp/888413
- Safe Args 现在依赖于 Kotlin 1.3.20 aosp/888414
问题修复
- 现在,可以在所有版本的 Android Gradle 插件的库和功能模块中使用 Safe Args。b/121304903
- 修复了导致单个
popBackStack()
操作在返回堆栈顶部弹出目标的所有副本,而不是一次仅弹出一个目标的回归问题。b/123552990 - 修复了
FragmentNavigator
状态与NavController
状态不同步,从而在尝试恢复返回堆栈时导致出现IllegalStateException
的问题。b/123803044 - 修复了将 ProGuard 与 obfuscation 一起使用时,
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/120042732- 将嵌套的
NavHostFragment
或其他子 Fragment 与返回堆栈一起使用时,NavController
现在可以正确处理popBackStack()
操作。b/122770335 NavigationUI
现在可以正确设置向上按钮的内容描述。b/120395362- Safe Args 生成的 Directions 类现在可以正确处理与目标上的操作具有相同 ID 的全局操作。b/122962504
- 当
equals()
返回 true 时,Safe Args 生成的NavDirections
类现在可以相应地具有相等的hashCode()
值。b/123043662 - 如果尝试对
NavHostFragment
的FragmentManager
自定义FragmentTransactions
,那么FragmentNavigator
现在会发出一条更明确的错误消息。应该始终使用getChildFragmentManager()
。b/112927148
版本 1.0.0-alpha09
2018 年 12 月 18 日
此版本包含重大 API 变更;请参阅下面的“重大变更”部分。
我们已选择不继续开发 android.arch.navigation:navigation-testing
工件。虽然经证实该工件对 NavController
的内部测试有帮助,但我们仍强烈建议使用其他测试策略,例如模拟 NavController
实例以验证是否已完成正确的 navigate()
调用。2018 年 Android 开发者峰会的一个 Activity 讲座对此方法做出了详细讨论,我们也将专门针对使用 Navigation 进行测试撰写其他文档。
新功能
- 与
NavigationUI
方法一起使用时,menuCategory="secondary"
的MenuItem
将不再弹出返回堆栈。b/120104424 AppBarConfiguration
现在允许您设置后备OnNavigateUpListener
实例,当navController.navigateUp()
返回false
时,系统会调用此实例。b/79993862 b/120690961
重大变更
- 将
<argument>
与argType="reference"
一起使用时,Navigation 将不再解析引用,而是提供原始资源 ID。b/111736515 onNavDestinationSelected()
现在默认弹回到导航图表的起始目标,使其与setup
方法保持一致。您可以将menuCategory="secondary"
添加到MenuItem
来避免弹出返回堆栈。aosp/852869- 生成的
Args
类的fromBundle()
方法现在接受非 nullBundle
,而不是可为 null 的Bundle
aosp/845616
问题修复
- 参数现在可以从深层链接中正确解析为正确的
argType
,而非始终解析为字符串 b/110273284 - Navigation 现在可以正确导出其公开资源 b/121059552
- Safe Args 现在可与 Android Gradle 插件 3.4 Canary 4 版及更高版本兼容 b/119662045
版本 1.0.0-alpha08
2018 年 12 月 6 日
此版本包含重大 API 变更;请参阅下面的“重大变更”部分。
新功能
- 当目标标签与
NavigationUI
方法一起使用时,系统现在会自动将android:label
中的{argName}
实例替换为正确的参数 b/80267266 - Navigation 现在依赖于支持库 28.0.0 b/120293333
重大变更
OnNavigatedListener
已重命名为OnDestinationChangedListener
b/118670572OnDestinationChangedListener
现在也传递参数的Bundle
aosp/837142- 移除了
app:clearTask
和app:launchDocument
属性及其关联的方法。使用app:popUpTo
与图表的根目录从返回堆栈中移除所有目标。b/119628354 ActivityNavigator.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 - 将 Fragment 创建工作移到了
FragmentNavigator
,从而可以更轻松地将 Fragment 创建工作委托给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
问题修复
- 当目标是
<navigation>
元素时,popUpTo
现在可以一致地工作 b/116831650 - 修复了在使用嵌套图表时导致出现
IllegalArgumentException
的一些错误 b/118713731 b/113611083 b/113346925 b/113305559 <activity>
目标的dataPattern
属性现在将通过调用toString()
来填充非字符串参数中的参数 b/120161365
Safe Args
- Safe Args 支持可序列化对象,包括枚举值。枚举类型可以使用不带类名的枚举文字来设置默认值(例如
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
工件现在依赖于 Kotlin 标准库。API 已被更改以与 Kotlin 惯例更加一致,但您可以继续将其用于采用 Java 语言编写的测试。- 不再支持元数据清单注册的导航图表。b/118355937
- 操作不能再附加到 <activity> 目标。aosp/785539
问题修复
- 深层链接现在可以正确解析查询参数。b/110057514
- Activity 目标现在可以正确应用所有进场动画和退出动画。b/117145284
- 修复了使用自定义导航器时在配置更改后发生崩溃的问题。b/110763345
Safe Args
- Safe args 现在固定依赖于 Android Gradle 插件 3.2.1。b/113167627
- 现在可以为内部类生成方向。b/117407555
- 修复了与生成 <include> 图表的方向有关的问题。b/116542123
版本 1.0.0-alpha06
2018 年 9 月 20 日
新功能
- 现在支持 Fragment 和 Activity 目标的共享元素转换 b/79665225。如需了解详情,请参阅使用导航架构组件实现导航。
- 如果在
NavigationView
中选择某项内容,现在将关闭任何包含的底部工作表 b/112158843
API 变更
- 重大变更:导航器
navigate()
方法现在接受Navigator.Extras
参数。 - NavController 的
getGraph()
方法现在为NonNull
b/112243286
问题修复
- 与来自各个目标的视图一起使用时,
NavigationUI.setupWithNavController()
不再泄露视图 b/111961977 - 现在仅调用一次导航器
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 插件中有关为空性的错误消息。
- 添加了缺少的为 null 性注释。
版本 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
属性实际上不是 null 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/行为变更
- 为工具栏添加了 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
- 例如,
- 重大变更:默认情况下,现在将参数视为非 null。要允许字符串和 Parcelable 参数具有 null 值,请添加
app:nullable="true"
b/79642307 - 您现在可以采用“123L”的形式对默认值使用
app:type="long"
b/79563966 - 现在支持 Parcelable 参数,并使用
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 插件 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/109826220Navigation 现在对从深层链接网址解析的参数执行 URLDecode 操作。b/79982454
问题修复
修复了在从 Fragment 生命周期方法调用 Navigation 时出现的
IllegalStateException
。b/79632233Navigation 现在依赖于支持库 27.1.1 来修复使用动画时的闪烁问题。b/80160903
修复了在使用 defaultNavHost="true" 作为子 Fragment 时出现的
IllegalArgumentException
。b/79656847修复了在使用 NavDeepLinkBuilder 时出现的
StackOverflowError
。b/109653065修复了在导航回嵌套图表时出现的
IllegalArgumentException
。b/80453447修复了在使用
launchSingleTop
时 Fragment 重叠的问题。b/79407969Navigation 现在可以为嵌套图表构建正确的合成返回堆栈。b/79734195
使用嵌套图表作为
MenuItem
时,NavigationUI 现在会突出显示正确的项。b/109675998
API 变更
弃用了操作的
clearTask
属性以及NavOptions
中的关联 API。b/80338878弃用了操作的
launchDocument
属性以及NavOptions
中的关联 API。b/109806636
版本 1.0.0-alpha01
2018 年 5 月 8 日
Navigation 可以提供用于构建应用内导航的框架。此初始版本为 1.0.0-alpha01
。