Navigation

Navigation 是一个框架,用于在 Android 应用中的“目标”之间导航,该框架提供一致的 API,无论目标是作为 Fragment、Activity 还是其他组件实现。
最近更新时间 当前稳定版 下一候选版 Beta 版 Alpha 版
2021 年 9 月 29 日 2.3.5 - - 2.4.0-alpha10

声明依赖项

如需添加 Navigation 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Groovy

dependencies {
  def nav_version = "2.3.5"

  // 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:2.4.0-alpha10"
}

Kotlin

dependencies {
  val nav_version = "2.3.5"

  // 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:2.4.0-alpha10")
}

Safe Args

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

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

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

Groovy

apply plugin: "androidx.navigation.safeargs"

Kotlin

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

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

Groovy

apply plugin: "androidx.navigation.safeargs.kotlin"

Kotlin

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

如需了解如何使用 Kotlin 扩展,请参阅 ktx 文档

如需详细了解依赖项,请参阅添加构建依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 2.4.0

版本 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 中,以便更好地支持可选导航器(例如来自 Accompanist Navigation Material 的导航器)。(I4619e)

bug 修复

  • 重新创建 activity 时,Dynamic Navigation 将不会再崩溃。(Ifa6a3b/197942869
  • 修复了仅在出栈回包含 NavHost 的可组合项目的地后才会发生的系统返回按钮问题。(3ed148b/195668143
  • SafeArgs 现在会以适当的参数顺序为 fromBundle()fromSavedStateHandle() 生成参数。(I824a8b/200059831

版本 2.4.0-alpha09

2021 年 9 月 15 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha09版本 2.4.0-alpha09 中包含这些提交内容

新功能

  • 您现在可以使用 clearBackStack() 方法来清除使用 popBackStack()popUpToSaveState 保存的状态。(I80a0f)
  • 现在,您可以向嵌套导航图的构建器传入参数和/或深层链接的列表,它们将自动添加到生成的图表中。(I8a470b/182545357

API 变更

  • navArgument Kotlin DSL 函数现在是 navigation-common(而非 navigation-compose)的一部分。这将需要更新 import 语句,才能继续使用此函数。(I1d095)

行为变更

  • 生成参数时,Safe Args 现在会将不含默认值的参数放在具有默认值的参数之前。(I89709b/198493585

bug 修复

  • 在使用 Navigation Compose 时,NavGraph 只有在其所有子级都处于 DESTROYED 状态后,才会处于 DESTROYED 状态。(I86552b/198741720
  • 可为 null 的 NavDeepLink 参数不再需要默认值。(Ia14efb/198689811
  • 现在,使用新图调用 setGraph() 时,不仅会清除返回堆栈之前的出栈行为,而且还会清除所有已保存的返回堆栈。(I97f96)
  • 修复了在使用 launchSingleTop 时不通知 OnDestinationChangedListener 实例和 currentBackStackEntryFlow 的问题。(Iaaebc)

依赖项更新

版本 2.4.0-alpha08

2021 年 9 月 1 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha08版本 2.4.0-alpha08 中包含这些提交内容

新功能

行为变更

  • 生成操作时,从 Safe Args 生成的 Kotlin 代码现在会将不含默认值的参数放在具有默认值的参数之前。(Idb697b/188855904
  • 深层链接现在会验证 Uri 中是否存在所有必需的参数(不含默认值的参数)。(#204b/185527157

bug 修复

  • 将 composable() 内的 getBackStackEntrypreviousBackStackEntryremember() 结合使用不会再导致因返回堆栈上没有目的地而出现异常。(I75138b/194313238
  • 在更改返回堆栈参数和使用 launchSingleTop=true 时,Navigation Compose 现在会正确进行重组。(Iebd69b/186392337
  • 使用具有 13 个或 29 个目的地的图调用 setGraph 时,不再会出现 ArrayIndexOutOfBoundsException。(I1a9f1b/195171984
  • SafeArgs Java 生成器在生成 Args 类时应该不会再导致 lint 警告。(I1a666b/185843837

外部贡献

  • 感谢 ospixd 确保深层链接会验证 Uri 中是否存在所有必需的参数(不含默认值的参数)。(#204b/185527157

版本 2.4.0-alpha07

2021 年 8 月 18 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha07版本 2.4.0-alpha07 中包含这些提交内容

bug 修复

  • 现在,Navigation Compose 可在配置更改后以及使用多个返回堆栈功能期间更改图时正确保存状态。(If5a3db/195141957
  • 将 Navigation Compose 与多个返回堆栈搭配使用时,重新选择同一标签页不会再生成空白屏幕。(I860dcb/194925622
  • NavHost 现在会观察 NavBackStackEntryLifecycle.State 中的更改,这意味着当生命周期更改时,在 fragment 中使用 NavHost 现在会正确重组,而不是生成空白屏幕。(I4eb85b/195864489
  • 修复了以下问题:重新创建 activity 后(即配置更改后),关闭 DialogFragment 无法正确更新 NavController 状态。(Icd72b)
  • 修复了以下问题:弹出对话框目的地不会更新 NavController 的系统返回按钮处理情况,这可能会导致 NavController 拦截返回按钮,即使该按钮没有任何要弹出的返回堆栈。(If3b34)
  • Safe-args 现在会自动为参数生成 toSavedStateHandle 方法,该方法可用于测试 ViewModel 代码。(If1e2db/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 状态。(If0543b/172112072b/194301889
  • Navigation Compose 的 NavHost 现在会将图设置为第一个组合的一部分。(Ieb7be)

bug 修复

  • 在弹出某个导航图的最后一个目的地时,系统不会再抛出 ClassCastException。(If0543b/172112072b/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 现在始终使用淡入淡出。(I07049b/172112072
  • 您现在可以更改 NavHost 的图表。具有相同 startDestination 的图表和图表中的目的地将被视为相等,并且不会清除 NavController 返回堆栈。(I0b8dbb/175392262

bug 修复

  • 修复了从附加到 NavBackStackEntryLifecycleObserver 中调用 popBackStack() 时因 NavController 状态的可重入更新而出现的 NoSuchElementException。(I64621)
  • AbstractListDetailFragment 现在允许在未使用 AbstractListDetailFragment 时从 APK 中完全删除 SlidingPaneLayout。(I611ad)
  • NavGraphNavDestination 现在替换了 equals 方法,因此两个具有相同值的对象将被视为相等。(I166ebb/175392262

版本 2.4.0-alpha04

2021 年 7 月 1 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha04版本 2.4.0-alpha04 中包含这些提交内容

新功能

  • navigation-fragment 工件现在包含一个双窗格布局的预构建实现(其是通过新的 AbstractListDetailFragment 实现的)。此 fragment 使用 SlidingPaneLayout 管理列表窗格(由您的子类提供)和详细信息窗格,采用 NavHostFragment 作为其实现方法,如示例实现中所示。(Iac4beb/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()。(Ie89fcb/172112072
  • 自定义 Navigator 实例现在可以使用 NavigatorState 中的 pushWithTransactionpopWithTransition API 对目的地异步执行入栈或出栈操作。请注意,此 API 尚未用于任何已包含的导航器。(Ic4d7cb/172112072

行为变更

  • NavDeepLinkBuilder 现在将 PendingIntent.FLAG_IMMUTABLE 添加到了 createPendingIntent() 返回的 PendingIntent 中,从而确保此 API 在以 Android 12 为目标平台时按预期工作。(If8c52)

bug 修复

  • 修复了 <include-dynamic> 存在的以下问题:传递给图表的参数无法正确传递给动态包含的图表。(I3e115)
  • 修复了使用默认值为 @nullstring[] 参数导航到目的地时抛出 NullPointerException 的问题。(I1fbe8)
  • @Navigator.Name 添加了 ProGuard 规则,修复了使用 R8 3.1 完整模式时出现的问题。(I2add9b/191654433
  • 使用 1.5.0 之前的 Kotlin 版本构建应用时,SafeArgs 不会再失败。(Icd1ffb/190739257

版本 2.4.0-alpha03

2021 年 6 月 16 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha03版本 2.4.0-alpha03 中包含这些提交内容

bug 修复

  • 修复了需要调用两次 navigate() 才能转到包含的动态图的问题。(I7785cb/188859835
  • 修复了 Navigation 2.4.0-alpha01 中引入的如下回归问题:当您位于顶层目的地时,setupActionBarWithNavController() 无法正确移除向上图标。(I5d443b/189868637
  • 修复了在先弹出 NavController 的根图后调用 popBackStack() 时出现的 IllegalStateException。(I2a330b/190265699
  • 现在,在使用 navigation-common 或任何依赖于它的工件时,可以正确对 by navArgs() 应用 ProGuard 规则。(I68800b/190082521
  • 在第一次收到回调时调用 navigate()OnDestinationChangedListener 现在可以正确获取包含要转到的目的地的第二次回调。(Ie5f9eb/190228815
  • 在将 Safe Args 与动态功能模块和 AGP 7.0 及更高版本结合使用时,Safe Args 不再崩溃。(I69518b/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 现在支持路线。(Ib5544Ia617bI22f96b/188914648b/188901565
  • NavigationUI 暂时添加了实验性 API,以允许选择不保存状态。虽然始终保存状态才是正确的行为,但仍会在保存状态时使用一些不受支持的废弃库(即保留的 fragment),这就让应用有机会慢慢减少对不受支持 API 的使用。(Idf93c)
  • Navigation 现在提供 findDestination()getHierarchy() API,可用于帮助实现自定义 NavigationUI。findDestination() 是针对 NavGraph 的扩展函数,用于在图中查找目的地。getHierarchy() 是针对 NavDestination 的函数,可用于验证给定目的地是否位于另一个目的地的层次结构中。(I2932fb/188183365

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • 更新了 NavigationUI 方法,从接受 BottomNavigationView 改为接受在 Material 1.4.0NavigationBarView 中引入的它的父类。这样一来,这些方法就可以与 NavigationRailView 搭配使用。(Ib0b36b/182938895

  • 通过 XML 膨胀 <action> 元素时,动画属性可以使用通过 app:enterAnim="?attr/transitionEnter" 语法从主题中提取的属性。(I07bc1b/178291654

API 变更

bug 修复

  • 现在,如果对话框是通过按系统返回按钮或点击对话框外的任意位置来关闭的,DialogFragmentNavigator 会使用 NavigatorState.pop() API 来通知 NavController,从而确保 NavController 状态与导航器的状态始终保持同步。(I2ead9)
  • 在使用 onDestinationChanged 回调操控 OnDestinationChangedListeners 的列表时,Navigation 不再提供 ConcurrentModificationException。(Ib1707b/188860458

  • 在 Kotlin 中尝试生成方向属性时,Safe Args 不再崩溃。(Id2416b/188564435

  • 针对 NavDestination 的 setId 方法现在已使用 @IdRes 正确进行注解,因此只接受资源 ID。(I69b80)

  • findNode 的 int 参数现为 resId,而不是 resid。(I7711d)

依赖项更新

  • Safe-Args 现在依赖于 Android Gradle 插件 4.2.0。也就是说,您应该不会再收到使用 applicationIdTextResource 的警告。(I6d67bb/172824579

版本 2.4.0-alpha01

2021 年 5 月 18 日

发布了 androidx.navigation:navigation-*:2.4.0-alpha01版本 2.4.0-alpha01 中包含这些提交内容

新功能

  • NavController 上的 currentBackStackEntryAsFlow() 方法提供了一个 Flow(会在每次当前 NavBackStackEntry 变化时发出)。此流程可以用作手动管理 OnDestinationChangedListener 的替代方案。(I19c4a#89b/163947280

多个返回堆栈

NavController 负责:管理目的地的返回堆栈,在您 navigate() 到相应目的地时将目的地添加到返回堆栈,以及在您调用 popBackStack() 或触发系统的返回按钮时移除目的地。我们扩展了导航图 XML 中现有的 NavOptions 类及 <action> 条目中的集成,以便支持保存和恢复返回堆栈。(b/80029773)

作为此变更的一部分,onNavDestinationSelected()BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController()NavigationUI 方法现在会自动保存并恢复弹出的目的地的状态,从而在不更改任何代码的情况下支持多个返回堆栈。将 Navigation 与 fragment 搭配使用时,建议采用这种方式与多个返回堆栈集成。(Ie07ca)

用于保存和恢复状态的底层 API 会通过许多途径公开:

  • 在 Navigation XML 中,<action> 元素现在可以使用 app:popUpToSaveStateapp: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 构建器上添加 restoreStatesaveState 布尔属性:

    // 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() 和新的过载用于采用了额外 saveState 参数的 setPopUpTo()

    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 以及包含 fragment 的 Navigation 中的 <fragment> 目的地所用的 FragmentNavigatorDynamicFragmentNavigator,以便使用新的导航器 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。(I59c73b/172823546
  • getStartDestination() API 已被废弃,取而代之的是 getStartDestinationId()。(I0887fb/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 子类)的类的可为 null 性。所有曾包含在 -ktx 工件中的 Kotlin 扩展函数都已移到其各自的主要工件中。-ktx 工件将继续发布,但它完全是空的。(b/184292145)
  • NavDeepLinkBuilder 现在支持向生成的返回堆栈中添加多个不同的目的地。(I3ee0db/147913689
  • DynamicNavHostFragment 添加了工厂函数(Icd515b/175222619
  • NavBackStackEntry 的唯一 ID 现已作为其公共 API 的一部分公开。(Ie033a)
  • NamedNavArgument 的“name”字段、“argument”字段和解构函数现已公开。(#174b/181320559
  • 引入了新的 NavBackStackEntry#provideToCompositionLocals 扩展,它会向相关的 CompositionLocal 提供 NavBackStackEntry。(#175b/187229439

Safe Args

  • Safe Args 现在会为每个 NavArgs 类生成一个 fromSavedStateHandle() 方法。(#122b/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。(#172b/183990444

行为变更

  • Navigation 现在依赖于 Lifecycle 2.3.1,并且现在会将更新 NavBackStackEntry LifecyclesetGraph()popBackStack()navigateUp()navigate() 方法标记为 @MainThread,从而使 Navigation 与 Lifecycle 2.3.0 中引入的主线程强制执行保持一致。(b/171125856)
  • 现在,解析来自深层链接的枚举参数时不区分大小写,举个例子:即使枚举值为 RED,深层链接 http://www.example.com/red 也会匹配深层链接 www.example.com/{color}。(#152b/135857840

Compose 兼容性

  • androidx.navigation:navigation-compose:2.4.0-alpha01 仅与 Compose 版本 1.0.0-beta07 及更高版本兼容。

bug 修复

  • 修复了以下问题:末尾的参数占位符会优先于后缀完全匹配的深层链接。(#153b/184072811
  • NavHostFragment 现在支持与默认 DialogFragmentNavigator 使用同一 @Navigator.Name("dialog") 的自定义导航器。(Ib1c2cb/175979140
  • 改进了 NavigatorProvider#addNavigator 的行为,以确保使用同一实例反复调用它不会产生问题。(#176b/187443146

外部贡献

  • 感谢 simonschiller 实现对 Safe Args 的支持,从而为每个 NavArgs 类生成一个 fromSavedStateHandle() 方法。(#122b/136967621
  • 感谢 Bradleycorn 实现解析来自深层链接的枚举参数时不区分大小写。(#152b/135857840
  • 感谢 osipxd 修复了以下问题:末尾的参数占位符会优先于后缀完全匹配的深层链接。(#153b/184072811
  • 感谢 tatocaster 将 Safe Args 更新为依赖于 KotlinPoet 1.8.0。(#172b/183990444
  • 感谢 jossiwolf 使 NamedNavArgument 的“name”字段、“argument”字段和解构函数公开。(#174b/181320559
  • 感谢 jossiwol 引入了新的 NavBackStackEntry#provideToCompositionLocals 扩展,从而向相关的 CompositionLocal 提供 NavBackStackEntry。(#175b/187229439
  • 感谢 jossiwolf 改进了 NavigatorProvider#addNavigator 的行为,以确保使用同一实例反复调用它不会产生问题。(#176b/187443146

版本 1.0.0-alpha10

2021 年 4 月 7 日

发布了 androidx.navigation:navigation-compose:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

API 变更

  • NavHost 现接受 Modifier,后者会向下传递到封装目的地可组合项的可组合容器。(I85acab/175125483

bug 修复

  • 现在,即使未找到 OnBackPressedDispatcherOwner(例如在预览 NavHost 时),NavHost 也可正常运行。(I7d8b4)
  • Navigation Compose 现在依赖于 Navigation 2.3.5,修复了在 NavHost 目的地内使用 BackHandler 时出现的问题。(I7e63bb/182284739

版本 1.0.0-alpha09

2021 年 3 月 10 日

发布了 androidx.navigation:navigation-compose:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • LocalViewModelStoreOwner.current 现在会返回可为 null 的 ViewModelStoreOwner,以更好地确定 ViewModelStoreOwner 在当前组合中是否可用。如果未设置 ViewModelStoreOwner,则需要 ViewModelStoreOwner 的 API(例如 viewModel()NavHost)仍会抛出异常。(Idf39a)

bug 修复

  • Navigation Compose 现在依赖于 Navigation 2.3.4,其中修复了在设置图表后尝试设置同一 ViewModelStore 对象的问题。(I65c24b/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 中的所有状态都将随目的地一起保存并恢复。(I435d7b/179469431

版本 1.0.0-alpha07

2021 年 2 月 10 日

发布了 androidx.navigation:navigation-compose:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

依赖项更新

版本 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 中包含这些提交内容

bug 修复

  • 修复了以下问题:配置更改或进程终止和重新创建后,popBackStack()navigateUp() 无法工作。(Icea47b/173281473
  • 现在,导航至 NavHost 中的嵌套图表可以正常工作。(I0948db/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(If96c3b/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 ComponentJetpack 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 中包含这些提交内容

新功能

  • 使用 NavDeepLinkRequestUri 进行导航时,您现在可以访问生成的目的地中的 Uri、操作和 MIME 类型,方法是通过 KEY_DEEP_LINK_INTENT,获取来自参数的 intent,对应于已提供的外部深层链接功能。(I975c3b/181521877

bug 修复

  • OnBackPressedCallbacks 已添加至带有 NavBackStackEntry 的调度程序,现在,如果 Activity Lifecycle 先为 STOPPED,然后重新变为 STARTED,则 LifecycleOwner 会正确拦截返回操作。(Iff94f, b/182284739)
  • 深层链接域名解析现在不区分大小写,因此确保 www.example.comwww.example.comwww.Example.com 都能匹配。请注意,查询参数名称仍区分大小写。(#144b/153829033
  • 修复了当某个目的地具有多个不可为 null 的默认参数,且导航到该目的地时只覆盖这些参数的子集时,可能出现的 NullPointerException。(aosp/1644827)

依赖项更新

外部贡献

版本 2.3.4

版本 2.3.4

2021 年 3 月 10 日

发布了 androidx.navigation:navigation-*:2.3.4版本 2.3.4 中包含这些提交内容

新功能

  • 现在,ReferenceType 参数作为深层链接 URI 的一部分发送时可以得到正确解析。这既支持原始整数值,也支持以 0x 为前缀的十六进制值。(#127b/179166693
  • 具有 app:argType="float" 的参数的 android:defaultValue 现在支持整数默认值,让您可以使用 android:defaultValue="0",而无需使用 0.0。(#117b/173766247

bug 修复

  • 修复了在利用 Navigation 对动态功能的支持时安装进度卡住的问题。(Ib27a7b/169636207
  • 现在,使用已设置的同一对象调用 setViewModelStoresetLifecycleOwner 将成为一项空操作(Idf491b/177825470
  • 现在,使用 java 时,Safe-Args 会在正确的方法上添加抑制注解。(I8fbc5b/179463137

外部贡献

  • 感谢 JvmName 提供的拉取请求,这可确保 ReferenceType 参数现在作为深层链接 URI 的一部分发送时可以得到正确解析。(#127b/179166693
  • 感谢 tatocaster 提供的拉取请求,这可以让具有 app:argType=”float” 的参数的 defaultValue 现在支持整数默认值。(#117b/173766247

版本 2.3.3

版本 2.3.3

2021 年 1 月 27 日

发布了 androidx.navigation:navigation-*:2.3.3版本 2.3.3 中包含这些提交内容

bug 修复

  • 现在,在 NavBackStackEntry 的 Lifecycle 变为 CREATED 之前弹出 NavBackStackEntry 时,不会再发生崩溃。(Ie3ba3)
  • 修复了由 b/171364502 引起的回归问题,具体为导航至动画资源值为 0 的 Activity 会导致 ResourceNotFoundException 错误。(I7aedbb/176819931

版本 2.3.2

版本 2.3.2

2020 年 12 月 2 日

发布了 androidx.navigation:navigation-*:2.3.2版本 2.3.2 中包含这些提交内容

bug 修复

  • 修复了 NavigationUI 中的一个回归问题,即使用带有 onNavDestinationSelected<activity> 目标位置无法导航到 Activity。(I22e34b/171364502
  • 修复了 navigation-dynamic-features-fragment 会导致多次导航到新安装的目标位置的问题。(aosp/1486056b/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 视图。这样,您便可以通过 FragmentScenarioNavigation.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)

bug 修复

  • Safe Args 将不再封装返回行,即使生成的参数类名称的长度超过 100 个字符也是如此。(b/168584987)

依赖项变更

  • navigation-ui 现在依赖于 DrawerLayout 1.1.1,从而确保即使是在使用 LOCK_MODE_LOCKED_CLOSEDLOCK_MODE_LOCKED_OPENNavigationUI 也能够打开抽屉式导航栏。(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-runtimenavigation-dynamic-features-fragment 工件,您可以导航到功能模块中定义的目标,从而根据需要自动处理功能模块的安装。如需了解详情,请参阅使用功能模块进行导航
  • 导航测试navigation-testing 工件提供了一个 TestNavHostController,可用于设置当前目标并在导航操作后验证返回堆栈。如需了解详情,请参阅测试导航
  • 返回结果:现在,通过与 Navigation 返回堆栈中的每个目标相关联的 NavBackStackEntry,您可以使用 SavedStateHandle,它适用于存储少量应与特定返回堆栈条目相关联的已保存状态。如需了解详情,请参阅向上一个目的地返回结果
  • OpenableNavigationUI 支持:使用 NavigationUIDrawerLayout 的所有情况都已替换为使用更通用的 Openable 接口,该接口已添加到 CustomView 1.1.0 中,并由 DrawerLayoutDrawerLayout 1.1.0 中实现。
  • 深层链接中的操作和 MIME 类型支持:深层链接现已经过扩展,除了之前可用的 app:uri 之外,还支持 app:actionapp:mimeTypeNavController 现在支持通过新的 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 中包含这些提交内容。

bug 修复

  • 修复了在使用 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 中包含这些提交内容。

bug 修复

  • 修复了进程终止后 NavBackStackEntryLifecycle 无法正确更新的问题。(b/155218371)
  • 现在进程终止后,可向在调用 setGraph() 之前注册的 OnDestinationChangedListener 实例正确发送恢复的目标。(b/155218371)
  • 现在使用 singleTop 时,NavBackStackEntry 会正确更新其参数,且更新后的参数会发送给所有 OnDestinationChangeListener 实例。(b/156545508)

依赖项更新

版本 2.3.0-alpha06

2020 年 4 月 29 日

发布了 androidx.navigation:navigation-*:2.3.0-alpha06。(版本 2.3.0-alpha06 中包含这些提交内容。

新功能

  • 深层链接已经过扩展,除了之前可用的 app:uri 之外,还支持 app:actionapp:mimeType。NavController 现在支持通过新的 NavDeepLinkRequest 类按这些字段的任意组合进行导航。(b/136573074b/135334841

API 变更

  • 极大地扩展了对 Dynamic Navigation 目标的 Kotlin DSL 支持。(b/148969800)

bug 修复

  • 修复了使用嵌套起始目标时深层链接 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)

bug 修复

  • Navigation 2.2.2 开始:修复了如果 Activity 中有多个 NavHostFragment 实例,深层链接到图的起始目的地时的 IllegalStateException。(b/147378752)

依赖项更新

版本 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)

bug 修复

  • 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 类,而是使用 CustomView 1.1.0-alpha02 中引入的 Openable 接口(从 DrawerLayout 1.1.0-alpha04 开始,DrawerLayout 会实现该接口),从而允许您将 Openable 的自定义实现与 NavigationUI 一起使用。(b/129030452)

bug 修复

  • 现在,navigation-common-ktx ProGuard 规则只会正确保留使用的 NavArgs 类,而非所有 NavArgs 实例。(b/150213558)

依赖项变更

  • Navigation 已还原其在 Core 1.2.0 方面的依赖项,现在依赖于 Core 1.1.0,以避免在 Navigation 不依赖于 Core 1.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)

bug 修复

  • 现在,在您自己的任务堆栈上启动应用时,navigateUp() 会将当前目的地的参数和 KEY_DEEP_LINK_INTENT 传递到之前的目的地。(b/147456890)

依赖项变更

版本 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)

bug 修复

  • Navigation 2.2.1 开始:没有查询参数的深层链接现在可以正确忽略任何查询参数,而不是将它们附加到尾随 {argument} 元素或不匹配深层链接。(b/147447512)
  • Navigation 2.2.1 开始:更新了 DrawerArrowDrawablenavigation-ui ProGuard 规则,以确保不需要 android.enableJetifier=true。(b/147610424)
  • Navigation 2.2.1 开始:navigation-common-ktx 模块现在具有唯一的清单软件包名称,而不是与 navigation-runtime-ktx 共用相同的清单软件包名称。(aosp/1141947)

依赖项更新

版本 2.2.2

版本 2.2.2

2020 年 4 月 15 日

发布了 androidx.navigation:navigation-*:2.2.2版本 2.2.2 中包含这些提交内容

bug 修复

  • 修复了如果 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

依赖项更新

版本 2.2.1

版本 2.2.1

2020 年 2 月 5 日

发布了 androidx.navigation:navigation-*:2.2.1版本 2.2.1 中包含这些提交内容

bug 修复

  • 没有查询参数的深层链接现在可以正确忽略任何查询参数,而不是将它们附加到尾随 {argument} 元素或不匹配深层链接。(b/147447512)
  • 更新了 DrawerArrowDrawablenavigation-ui ProGuard 规则,以确保不需要 android.enableJetifier=true。(b/147610424)
  • navigation-common-ktx 模块现在具有唯一的清单软件包名称,而不是与 navigation-runtime-ktx 共用相同的清单软件包名称。(aosp/1141947)

依赖项更新

版本 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 驱动的 LifecycleOwnerViewModelStoreOwner(与 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 中包含这些提交内容

bug 修复

版本 2.2.0-rc03

2019 年 12 月 4 日

发布了 androidx.navigation:navigation-*:2.2.0-rc03版本 2.2.0-rc03 中包含这些提交内容

bug 修复

  • 修复了以查询参数和一个实参作为路径最后一部分时存在的深层链接解析问题,此问题会导致最终路径实参中的多个字符无法解析。(b/144554689)
  • 解决了可选参数会收到 "@null" 而非 null 的深层链接解析问题。(b/141613546)
  • 现在,如果将 NavHostFragmentFragmentContainerView 配合使用,前者可在配置发生更改后正确恢复图表。(b/143752103)

依赖项变更

  • Navigation 现在会视情况依赖于 Lifecycle 2.2.0-rc03、Lifecycle ViewModel SavedState 1.0.0-rc03、Activity 1.1.0-rc03 和 Fragment 1.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)

bug 修复

  • 修复了以下问题:如果还指定了查询参数,深层链接路径中的参数将被忽略。(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)

bug 修复

  • 修复了在使用 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 还提供导航驱动的 LifecycleOwnerViewModelStoreOwner(与 NavController.getViewModelStoreOwner() 返回的内容相同)和 SavedStateRegistryOwner。(aosp/1101691aosp/1101710

bug 修复

  • 修复了将 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 变更

bug 修复

  • 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() 属性委派或使用添加到 NavControllergetViewModelStoreOwner() API,创建在导航图表级别限定范围的 ViewModel。如需了解详情,请参阅在目标之间共享与界面相关的数据
  • dialog 目标:您现在可以创建 <dialog> 目标,当您 navigate 到这些目标时,系统会显示 DialogFragmentNavHostFragment 默认支持 dialog 目标。如需了解详情,请参阅从 DialogFragment 创建目标
  • 通过 Uri 导航:您现在可以使用 Uri 进行 navigate,它使用您已添加到目标的 <deepLink> 进行导航。如需了解详情,请参阅使用 Uri 导航
  • NavHostController:专门用于构建自定义 NavHost 的 API 已移至 NavHostController,从而允许实现将其 NavController 连接到托管 LifecycleOwnerOnBackPressedDispatcherViewModelStore

版本 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。点击此处可查看此版本中包含的提交内容。

bug 修复

  • 移除了在 2.1.0-beta01 中引入的意外 jacoco 依赖项。(b/137782950)

版本 2.1.0-beta01

2019 年 7 月 17 日

发布了 androidx.navigation:*:2.1.0-beta01。点击此处可查看此版本中包含的提交内容。

新功能

  • setupWithNavController()ToolbarCollapsingToolbarLayout 结合使用时,NavigationUI 现在会以动画形式显示向上按钮的移除。(b/131403621)

bug 修复

  • 修复了通过 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)

bug 修复

  • 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() 方法替换为 NavHostControllersetOnBackPressedDispatcher()方法,现在要求您在调用该方法之前先调用 setLifecycleOwner()。(aosp/965409)
  • NavHostController 现在包含 enableOnBackPressed(boolean) 方法,该方法替换了先前由 setHostOnBackPressedDispatcherOwner() 返回的 NavHostOnBackPressedManager 类。(aosp/966091)

bug 修复

  • 修复了通过 URI 导航后返回堆栈不正确的问题。(b/132509387)
  • NavController 自动处理的深层链接现在仅触发一次。(b/132754763)

版本 2.1.0-alpha04

2019 年 5 月 16 日

发布了 androidx.navigation:*:2.1.0-alpha04。点击此处可查看此版本中包含的提交内容。

bug 修复

  • 在拦截系统返回按钮事件时,NavHostFragment 正确遵守 app:defaultNavHost,从而修复了 Navigation 2.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 变更

  • 弃用了 NavHostFragmentcreateFragmentNavigator() 方法,并且其功能已移至新的 onCreateNavController() 方法,以便您更清楚地了解,这是创建子类 NavHostFragment 时添加自定义导航器的正确入口点。b/122802849
  • hasDeepLink() 方法添加到了 NavDestination,以便检查给定的 Uri 是否可由给定的目标处理,或者在有 NavGraph 的情况下,否可由导航图表中的任何目标处理。b/117437718

bug 修复

  • 默认参数现在将正确传递到 OnDestinationChangedListener 实例。b/130630686
  • NavHostFragment 现在使用 OnBackPressedDispatcher 拦截系统返回事件,从而修复了返回到 Fragment 时在 Fragment 生命周期方法中进行条件导航时出现的问题。b/111598096
  • 对于 Safe Args,现在可以将未指定 app:argTypeandroid:defaultValue=”@null” 正确推断为 string 参数。b/129629192

版本 2.1.0-alpha02

2019 年 4 月 3 日

发布了 androidx.navigation:*:2.1.0-alpha02。点击此处可查看此版本中包含的提交内容。

新功能

  • 您现在可以通过针对 Kotlin 用户的 by navGraphViewModels() 属性委托或者通过使用添加到 NavControllergetViewModelStore() API,创建在导航图表级别限定范围的 ViewModel。b/111614463

API 变更

  • 您现在可以将 app:targetPackage 添加到 <activity>,以限制匹配的软件包名称。它支持 app:targetPackage="${applicationId}",可将软件包限制为您自己的应用 ID。b/110975456

bug 修复

  • <activity> 目标的 android:name 在膨胀时不再解析为类,从而避免在使用动态功能时出现 ClassNotFoundException。b/124538597

版本 2.1.0-alpha01

2019 年 3 月 19 日

这是 Navigation 2.1.0 的第一个 Alpha 版本。

依赖项变更

  • Navigation 现在依赖于 androidx.core:core:1.0.1androidx.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

bug 修复

  • 有附加到目标的参数时,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 稳定版的第二个候选版本。此版本修复了很多问题。

bug 修复

  • 修复了在根图没有 ID 的情况下 popBackStack() 会被忽略的问题 b/126251695
  • 在处理没有 FLAG_ACTIVITY_NEW_TASK 的深层链接后调用 navigateUp() 时,它现在可以正确处理导航回应用的任务这一行为 b/126082008
  • 修复了 ActivityNavigator.applyPopAnimationsToPendingTransition 无法应用正确的弹出退出动画的问题 b/126237567
  • 由 Safe Args 生成的 Kotlin 代码现在可以正确转义 Kotlin 关键字,例如与 R 类相关联的软件包名称中的 infunb/126020455

版本 1.0.0-rc01

2019 年 2 月 21 日

这是 Navigation 1.0.0 稳定版的候选版本。此版本修复了一个问题。

bug 修复

  • 修复了使用 Fragment 和 singleTop 导航操作时出现的问题 b/124294805

版本 1.0.0-beta02

2019 年 2 月 12 日

此版本进行了一些微小的改进并修复了一些重要问题。

新功能

  • 您现在可以将 0 用作 reference 参数的 android:defaultValueb/124248602

行为变更

  • 深层链接完全匹配现在优先于使用 .* 或具有匹配参数的深层链接匹配。b/123969518

bug 修复

  • 当返回堆栈上弹出最后一个目标时,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

bug 修复

  • 现在,可以在所有版本的 Android Gradle 插件的库和功能模块中使用 Safe Args。b/121304903
  • 修复了导致单个 popBackStack() 操作在返回堆栈顶部弹出目标的所有副本,而不是一次仅弹出一个目标的回归问题。b/123552990
  • 修复了 FragmentNavigator 状态与 NavController 状态不同步,从而在尝试恢复返回堆栈时导致出现 IllegalStateException 的问题。b/123803044
  • 修复了将 ProGuard 与 obfuscation 一起使用时,NavigationUI 处理的返回箭头不会显示的问题。b/123449431
  • 由 Safe Args 生成的代码现在可以正确处理使用指向静态内部类的 app:argType 这一行为,静态内部类的格式为 .OuterClass$InnerClassb/123736741
  • 由 Safe Args 生成的 Java 代码现在可以正确处理全局操作和深层嵌套的目标。b/123347762

版本 1.0.0-alpha11

2019 年 1 月 23 日

这是 1.0.0-alpha10 的修补程序版本,修复了 Safe Args 的问题。

bug 修复

  • 修复了 Safe Args 无法导入与全局操作相关联的 Directions 类的问题。b/123307342

版本 1.0.0-alpha10

2019 年 1 月 23 日

已知问题

  • Safe Args 无法导入与全局操作相关联的 Directions 类。b/123307342

此版本包含重大 API 变更;请参阅下面的“重大变更”部分。

新功能

  • Kotlin 用户现在可以使用 by navArgs() 属性委托来延迟获取对 ActivityFragment 中由 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() 方法已移至 ActivityNavigatorb/122413117
  • Safe Args 现在可以避免为没有参数的操作复制相同的类。生成的 NavDirections 类中无参数方法的返回类型现在为 NavDirectionsb/123233147
  • Safe Args 生成的 Directions 类不再具有公共构造函数 - 您只应与生成的静态方法进行互动。b/123031660
  • Safe Args 生成的 NavDirections 类不再具有公共构造函数 - 它们只能通过生成的 Directions 类中的静态方法生成。b/122963206
  • NavDirectionsgetArguments() 返回的 Bundle 现在标记为 @NonNull,而不是 @Nullableb/123243957

bug 修复

  • 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
  • 如果尝试对 NavHostFragmentFragmentManager 自定义 FragmentTransactions,那么 FragmentNavigator 现在会发出一条更明确的错误消息。应该始终使用 getChildFragmentManager()b/112927148

版本 1.0.0-alpha09

2018 年 12 月 18 日

此版本包含重大 API 变更;请参阅下面的“重大变更”部分。

我们已选择不继续开发 android.arch.navigation:navigation-testing 工件。虽然经证实该工件对 NavController 的内部测试有帮助,但我们仍强烈建议使用其他测试策略,例如模拟 NavController 实例以验证是否已完成正确的 navigate() 调用。2018 年 Android 开发者峰会的 Single 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() 方法现在接受非 null Bundle,而不是可为 null 的 Bundle aosp/845616

bug 修复

  • 参数现在可以从深层链接中正确解析为正确的 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/118670572
  • OnDestinationChangedListener 现在也传递参数的 Bundle aosp/837142
  • 移除了 app:clearTaskapp:launchDocument 属性及其关联的方法。使用 app:popUpTo 与图表的根目录从返回堆栈中移除所有目标。b/119628354
  • ActivityNavigator.Extras 现在使用 Builder 模式,并添加了设置任何 Intent.FLAG_ACTIVITY_ 标记的功能 aosp/828140
  • NavController.onHandleDeepLink 已重命名为 handleDeepLink aosp/836063
  • 许多不适合子类化的类和方法(如 NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration)已设为 final aosp/835681
  • 移除了弃用的 NavHostFragment.setGraph() 方法 aosp/835684
  • 移除了弃用的 NavigationUI.navigateUp(DrawerLayout, NavController) 方法 aosp/835684
  • 将 Fragment 创建工作移到了 FragmentNavigator,从而可以更轻松地将 Fragment 创建工作委托给 FragmentFactoryb/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

bug 修复

  • 当目标是 <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 日

新功能

重大变更

  • navigation-testing-ktx 模块放入了 navigation-testing artifact,该模块将不再发布。
  • navigation-testing 工件现在依赖于 Kotlin 标准库。API 已被更改以与 Kotlin 惯例更加一致,但您可以继续将其用于采用 Java 语言编写的测试。
  • 不再支持元数据清单注册的导航图表。b/118355937
  • 操作不能再附加到 <activity> 目标。aosp/785539

bug 修复

  • 深层链接现在可以正确解析查询参数。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 日

新功能

API 变更

  • 重大变更:导航器 navigate() 方法现在接受 Navigator.Extras 参数。
  • NavController 的 getGraph() 方法现在为 NonNull b/112243286

bug 修复

  • 与来自各个目标的视图一起使用时,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 日

bug 修复

  • 修复了导致返回堆栈行为不正确的错误。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

bug 修复

  • 修复了深层链接到 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

bug 修复

  • 修复了在 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/109826220

  • Navigation 现在对从深层链接网址解析的参数执行 URLDecode 操作。b/79982454

bug 修复

  • 修复了在从 Fragment 生命周期方法调用 Navigation 时出现的 IllegalStateExceptionb/79632233

  • Navigation 现在依赖于支持库 27.1.1 来修复使用动画时的闪烁问题。b/80160903

  • 修复了在使用 defaultNavHost="true" 作为子 Fragment 时出现的 IllegalArgumentExceptionb/79656847

  • 修复了在使用 NavDeepLinkBuilder 时出现的 StackOverflowErrorb/109653065

  • 修复了在导航回嵌套图表时出现的 IllegalArgumentExceptionb/80453447

  • 修复了在使用 launchSingleTop 时 Fragment 重叠的问题。b/79407969

  • Navigation 现在可以为嵌套图表构建正确的合成返回堆栈。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