導航

「導航」是可以在 Android 應用程式中導航各個「目的地」的架構,可提供一致的 API,無論目的地是片段、活動或其他元件,都能以一致的方式呈現。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2022 年 4 月 20 日 2.4.2 - 2.5.0-beta01 -

宣告依附元件

如要在導航上新增依附元件,必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增您需要的成果依附元件:

Groovy

dependencies {
  def nav_version = "2.4.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:$nav_version"
}

Kotlin

dependencies {
  val nav_version = "2.4.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:$nav_version")
}

Safe Args

如要在專案中新增Safe Args,請在頂層 build.gradle 檔案中納入下列 classpath

Groovy

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

Kotlin

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

您必須一併套用兩個可用的外掛程式之一。

如要產生適合 Java 或混用 Java 及 Kotlin 模組的 Java 語言程式碼,請將以下這一行新增至應用程式或模組build.gradle 檔案:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

或者,如要產生適合 Kotlin 模組的 Kotlin 程式碼,請加入:

Groovy

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

Kotlin

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

根據遷移至 AndroidX 一文,gradle.properties 檔案中必須含有 android.useAndroidX=true

如要進一步瞭解如何使用 Kotlin 擴充功能,請參閱 ktx 說明文件

如要進一步瞭解依附元件,請參閱 新增建構依附元件 一文。

意見回饋

您的意見可協助我們改善 Jetpack。發現新的問題或有改善這個程式庫的想法時,請告訴我們。請先查看此程式庫中的現有問題,再建立新的問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

2.5 版本

2.5.0-beta01 版本

2022 年 4 月 20 日

發布 androidx.navigation:navigation-*:2.5.0-beta012.5.0-beta01 版本包含這些修訂版本。

修正錯誤

  • DialogNavigator 現在在執行 dismiss() 呼叫時會使用 popWithTransition。如此修正了競爭狀況,以往使用 dialog 目的地中的 ViewModel 時,在使用系統返回或輕觸對話方塊外部關閉對話方塊時,會有導致 IllegalStateException 的情形。(Id7376, b/226552301)

依附元件更新

  • Navigation 現在取決於生命週期 2.5.0-beta01,修正了 IllegalStateException,亦即在非主要底部瀏覽分頁標籤中使用多個返回堆疊、在一個 NavHost 中與另一個 NavHost 建立巢狀結構時,會出現此問題。

2.5.0-alpha04 版本

2022 年 4 月 6 日

發布 androidx.navigation:navigation-*:2.5.0-alpha042.5.0-alpha04 版本包含這些修訂版本。

API 異動

修正錯誤

  • NavHost 現在取決於 NavController 中的 visibleEntries,以決定要撰寫的項目。這表示在使用巢狀的 NavHost 時,內部的 NavHost 現已可正確顯示動畫效果。(I4ba2b, b/225394514)
  • NavController 提供的 visibleEntries StateFlow 現在會依據生命週期狀態的上限,而非目前的生命週期狀態。亦即即使 navController 的代管生命週期變成低於 STARTED,可見的項目清單仍會維持不變。(I9e2a8, b/225394514)
  • SavedStateViewFactory 現在支援使用 CreationExtras (即使已透過 SavedStateRegistryOwner 初始化)。如果提供額外項目,系統將忽略初始化的引數。(I6c43bb/224844583)
  • NavDeepLink 現在可以在沒有值的狀況下,以單一查詢參數來剖析 URI。(I0efe8, b/148905489)
  • 現在,系統會將空白字串視為深層連結中的有效引數。(I70a0d, b/217399862)
  • 使用命名空間時而且沒有任何 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)
  • CreationExtras 搭配 NavBackStackEntries 使用可正確建立 ViewModel。(I69161, b/217617710)
  • 導航 Safe Args 現在支援使用 build.gradle 中定義的命名空間,取代 Android 資訊清單中的套件。(I659ef, b/217414933)

版本 2.5.0-alpha02

2022 年 2 月 9 日

androidx.navigation:navigation-*:2.5.0-alpha02 發布。2.5.0-alpha02 版本包含這些修訂版本。

修正錯誤

  • 導航 2.4.1 開始:NavHostFragment 在使用帶有巢狀結構圖形的 viewbinding 時,將能正確設定 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 版本包含這些修訂版本。

新功能

修正錯誤

  • 修正從片段的 onCreate() 透過 by navGraphViewModels() 建立 ViewModel 時會造成 IllegalStateException 失敗的問題。(I8a14d)
  • NavDeepLink 不會再不必要地解碼引數,這表示適當的引數現在會傳送到最終目的地。(I31b0a, b/210711399)

Safe Args

  • Safe Args 目前是以 Android Gradle Plugin 7.0.4 版為基礎。也就是說,導航 Safe Args 已不再適用於 7.0 之前的 Android Studio 版本,但現在與 Android Gradle 外掛程式 7.1.0 及以上版本相容。(I41c88, b/213086135, b/207670704)

2.4.2 版本

2.4.2 版本

2022 年 4 月 6 日

發布 androidx.navigation:navigation-*:2.4.22.4.2版包含這些修訂版本。

修正錯誤

2.4.1 版本

2.4.1 版本

2022 年 2 月 9 日

發布 androidx.navigation:navigation-*:2.4.12.4.1 版隨附這些修訂版本。

修正錯誤

  • 透過 NavHostFragment,現在可以使用含有巢狀結構圖的 viewbinding 時正確設定 OnBackPressedDispatcher。(Ifbb51, b/214577959)
  • 當透過多個巢狀結構 NavGraph 進行深層連結時,返回堆疊現在會正確納入中繼啟動目的地。(I504c0, b/214383060)
  • 導航2.5.0-alpha01向後移植:修正透過 by navGraphViewModels() 從片段的 onCreate() 存取建立的 ViewModel 時,IllegalStateException 可能會失敗的問題。(I8a14d)
  • 導航2.5.0-alpha01 向後移植:NavDeepLink 不再對不必要的引數解碼兩次,這表示正確解碼的引數現在會傳送到最終目的地。(I31b0a, b/210711399)
  • 導航2.5.0-alpha01 向後移植:Safe Args 現在取決於Android Gradle 外掛程式版本 7.0.4。這表示導航 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.02.4.0 版包含這些修訂版本。

2.3.0 版之後的重要異動

  • 所有導航成果均已在 Kotlin 中重新編寫。這進一步改善了使用一般化的類別(例如 NavType 子類別)的空值。所有先前屬於 -ktx 成果的 Kotlin 擴充功能,都已移至各自的主要成果中。-ktx 成果會繼續發布,但不會有任何內容。
  • navigation-fragment 成果現在包含透過新版 AbstractListDetailFragment 兩個窗格版面配置 的預建構實作。此片段使用 SlidingPaneLayout 來管理清單窗格(也就是子類別提供的清單)及詳細資料窗格,其使用 NavHostFragment 做為實作,如 實作範例 中所述。
  • NavController 上的 currentBackStackEntryAsFlow() 方法提供的 Flow 會在目前的 NavBackStackEntry 改變時出現。 此流程可做為手動管理 OnDestinationChangedListener 的替代選項。
  • NavController 現在支援透過實驗性 visibleEntries 屬性,以擷取所有可見 NavBackStackEntry 執行個體清單。作為 StateFlow
  • 現在可以擴充 NavType 類別,以便建立自訂 NavTypes。只有在使用程式輔助下(例如透過 導航圖 Kotlin DSL)建構導航圖時才支援自訂類型。
  • 「導航」功能現提供 findStartDestination()getHierarchy() API,可用來實作自訂 NavigationUI。findStartDestination()NavGraph 的擴充功能,可用來定位實際開始目的地,該目的地將在導航到圖形時才會顯示,即使 startDestination 本身就是巢狀結構 NavGraphgetHierarchy()NavDestination 的函式,可用來驗證特定目的地是否在另一個階層中。

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • 採用 BottomNavigationView 的方法 NavigationUI 已更新,改為採用材質 1.4.0NavigationBarView 中推出的父類別。因此這些方法可以與 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

先前版本的導航功能會根據每個目的地有相同的整數 ID,以從其同層級目的地中辨識出該 ID,並允許直接或透過操作 navigate() 前往該目的地。這個做法仍然有效且有用,尤其當您要在 XML 中定義導航圖,且可以使用自動產生的 R.id 常數或 Safe Args(會在建構期間使用這些常數產生程式碼)時,此系統的唯一整數無法獲得語意含義和運算式,而這是透過 導航 Kotlin DSL 以程式輔助方式在執行階段建立完整動態圖形所需的條件。

這個版本推出了一個新選項,可讓您根據 路徑 在導航圖中識別目的地。路徑 是定義到達目的地的唯一不重複路徑的 String。所有使用目的地 ID 的 Kotlin DSL 方法現已淘汰,替換為採用路徑的對等 API。

每個路徑都應視為定義該目的地 Uri 的「路徑」部分,例如 homeprofile/{userId}profile/{userId}/friends 等。如果目的地識別資訊與特定內容相關聯,這些動態引數應屬於路徑的一部分,遵守與 默示深層連結 相同的規則。

原本只使用 ID 的 NavController API 現在都有使用路徑 String 的超載。這包括 navigate()popBackStack()popUpTo()getBackStackEntry()

這會對 API 造成一些影響:

  • Kotlin DSL 上的 popUpTo Kotlin 屬性已淘汰,請改用 popUpToId
  • getStartDestination() API 已淘汰,並改用 getStartDestinationId()

與以 ID 進行導航不同,依路線導航時會採用與隱式深層連結,您可以直接前往任何巢狀結構圖中的任一目的地,確認這些路徑可用於多模組專案,而不要為每個目的地新增外部可見的深層連結。

導航 Compose

navigation-compose 成果可提供 導航元件Jetpack Compose 之間的整合。它使用 @Composable 函式做為應用程式的目的地。

此版本提供以下功能:

  • 一種 NavHost 組合元件,可讓您使用 composabledialog 目的地透過 Kotlin DSL 建立導航圖,並支援 Accompanist 導航材質 等選用導航器。
  • 須在目的地之間支援交集。Acomcomistist 導航動畫 可用來針對實驗的 Compose API 控制輸入和結束轉場效果。
  • Lifecycle 的範圍轉換成各個可組合的目的地。當任何進入轉場結束時,隨即立即下降到 STARTED,以及當任何結束轉場開始時,每個目的地只能到達 RESUMED 狀態,這樣就能避免 IllegalStateException 和多點觸控問題,只需在 LifecycleRESUMED 時觸發 navigate
  • 在目的地層級設定 ViewModel(透過 生命週期 ViewModel Compose 2.4.0viewModel() API 或Hilt 導航撰寫1.0.0hiltViewModel() 的範圍,提供能滿足設定變更且位於返回堆疊的範圍(當處置可組合內容時)以及 ViewModel 中的訊號 onCleared() 表示永久拋棄及 NavBackStackEntry 的相關狀態被清除。
  • 在目的地層級設定 rememberSaveable 狀態的範圍,確保所有可組合的狀態會在您返回目的地時自動儲存並還原。
  • 完整支援在處理結束並重新建立之後,儲存和還原 NavController 的狀態,及其目的地狀態。
  • 自動與系統返回按鈕整合。
  • 支援傳遞引數、將深層連結附加至目的地,以及將結果傳回先前的目的地。

  • rememberNavController()currentBackStackEntryAsState() 中編寫特定輔助程式,以允許 提升狀態,並將 NavControllerNavHost 之外的可組合元件(例如底部導航列)建立連結。

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 導航指南

多個返回堆疊

NavController 負責管理目的地的返回堆疊,因此當您 navigate() 至其堆疊位置時在返回堆疊中新增目的地,而在呼叫 popBackStack() 或觸發系統後,就會移除這些目的地。現有 NavOptions 類別和在導航圖 XML 中整合至 <action> 元素,已擴大至支援儲存和還原返回堆疊。

作為本次異動的一部分,onNavDestinationSelected()BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController()NavigationUI 方法現在會自動儲存並還原彈出目的地的狀態,因此無需任何程式碼變更即可支援多個返回堆疊。將「片段」與「導航」搭配使用時,這是與多個返回堆疊整合的首選方式。

儲存和還原狀態的基礎 API 會透過數種途徑呈現:

  • 在導航 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 建構工具 中加入 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 時能夠正常運作。
  • 導航現在取決於生命週期 2.3.1,現在會標示為 setGraph()popBackStack()navigateUp()navigate(),將 NavBackStackEntry Lifecycle 更新為 @MainThread 的方法,使導航功能符合生命週期 2.3.0 中引入的主要執行緒強制執行功能。
  • 深層連結現在會驗證 Uri 中是否包含所有必要的引數(沒有預設值)。
  • NavDeepLink 剖析的引數現在會將井字號視為問號,與路徑區隔之間的分隔符一樣,以免引數橫跨井字號。
  • 在產生操作時,Safe Args 產生的 Kotlin 程式碼現在會優先使用不含預設值的引數,然後將預設值設為參數。
  • 在產生引數時,Safe Args 現在會優先顯示不含預設值的參數,然後是含有預設值的參數。
  • Safe-Args 目前取決於 Android Gradle 外掛程式 4.2.0。也就是說,不會再使用 applicationIdTextResource 警告。

已知問題

  • 導航 2.5.0-alpha01 中修正:從片段的 onCreate() 存取透過 by navGraphViewModels() 建立的 ViewModel 將會失敗 (IllegalStateException)。(b/213504272)
  • 已修正 導航 2.5.0-alpha01:Safe Args 2.4.0 與Android Gradle 外掛程式 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 剖析的引數現在會將井字號以同樣方式視為問號,作為引數之間的一個分隔符。(I21309b/180042703)

修正錯誤

  • 深層連結不再忽略含有與預留位置名稱相同的值引數。(If8017b/207389470)
  • 還原 NavController 後,NavController 不會在透過轉場效果彈出巢狀結構目的地時當機。(I0f7c9b/205021623)
  • 從現在起,如果使用無效的 startDestination,系統會顯示錯誤訊息做為起始目的地的路徑(如有)。(I86b9db/208041894)

導航 Compose 修正錯誤

  • 修正問題:使用底部導航選單項目在起始目的地和其他目的地之間快速切換時可能會導致當機。(Ic8976b/208887901)
  • 設定變更或處理結束後,對話方塊目的地就會立即在螢幕頂端復原。(I4c0dcb/207386169)
  • 修正問題:在對話方塊關閉時嘗試從對話方塊 NavBackStackEntry 擷取 ViewModel 的問題。(I6b96db/206465487)
  • 修正問題:如果將 activity 目的地與導航 Compose 的 NavHost 搭配使用,會導致無限制重新組合。(I8f64c)
  • 修正導航 Compose 中的外洩問題:在設定變更或處理結束後,會保留於舊活動的參考中。(I4efcbb/204905432)

Safe Args 錯誤修正

  • 處理程序結束後,嘗試復原自訂可封裝陣列時,SafeArgs 不會再當機。(I618e8b/207315994)
  • 已修正 safe args 中的錯誤,即不允許布林值有 null 值。(I8c396b/174787525)

版本 2.4.0-beta02

2021 年 11 月 3 日

發佈 androidx.navigation:navigation-*:2.4.0-beta022.4.0-beta02 版本包含這些修訂版本。

API 異動

  • 系統處理明確與隱含深層連結時,現在會在前往其他圖形時自動新增 saveState 旗標,以確保程式碼(例如 NavigationUI.setupWithNavController 和採用多個返回堆疊的程式碼)正常運作。(Ic8807)

行為變更

  • 深層連結模式現已在 NavDeepLink 中延遲編譯,而非在加載期間。這樣可以改善含有深層連結的導航圖的加載時間。(b8d257b/184149935)

修正錯誤

  • 修正問題:當 NavHost 直接加入活動的 setContent() 中時,NavBackStackEntries 移至 Lifecycle.State.STARTED 之後被下推至 Lifecycle.State.CREATED。(Ia5ac1, b/203536683)
  • 修正競爭狀況,以往在對話方塊中實際顯示前,會從返回堆疊彈出 DialogFragment 目的地,這實際上不會關閉對話方塊,導致使用者手動關閉錯誤的對話方塊時發生當機。(I687e5)
  • 修正問題:即使您實際上並未 navigate() 前往該導航圖,NavigationUI 上的 onNavDestinationSelected API 也會傳回 true。目前使用的邏輯與 setupWithNavController 內部使用的邏輯相同,僅使用目的地的 hierarchy 來選擇與目前目的地相關聯的 MenuItem。(I2b053)

版本 2.4.0-beta01

2021 年 10 月 27 日

發佈 androidx.navigation:navigation-*:2.4.0-beta012.4.0-beta01版本包含這些修訂版本。

新功能

  • 您現在可以將 by navGraphViewModel 與路徑搭配使用,作為使用 ID 的替代方案,以便透過導航 Kotlin DSL 為片段提供更好的支援。(I901e3b/201446416)

API 異動

  • visibleEntries API 目前處於實驗階段。(I93f6f)

修正錯誤

  • 當在相同螢幕 (Id52d8b/200817333) 之間來回切換從而中斷了轉換時,ViewModel 不會再被毀。
  • 當在 NavDestination 中加入深層連結時,可空值 NavDeepLink 引數不再需要預設值。(I5aad4b/201320030)
  • 現在使用不同生命週期的 NavBackStackEntries 已不再被視為等化。這表示當使用者使用 SingleTop 進行導航時,或重新選取底部選單項目時,NavHost 會正確地重新編排所有目的地。(I1b351b/196997433)
  • 修正 AbstractListDetailFragment 的問題:導致 onCreateListPaneView() 傳回的清單窗格中的 layout_widthlayout_weight 屬性被錯誤處理或遭到忽略。(f5fbf3)
  • 對話方塊目的地的視覺化狀態現已與 DialogFragmentNavigator 的狀態正確保持同步。也就是說,手動呼叫 DialogFragment 的非同步 dismiss() API,會正確清除目前已關閉對話方塊的所有對話方塊。這並不會影響您使用 popUpTopopBackStack() 關閉對話方塊的情況。(I77ba2)
  • AbstractAppBarOnDestinationChangedListener 現在向 onDestinationChanged() 提供更清楚的錯誤訊息。(Ie742d)

版本 2.4.0-alpha10

2021 年 9 月 29 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha102.4.0-alpha10 版本包含這些修訂版本。

新功能

  • NavController 現在提供透過 visibleEntries StateFlow (Ia964e) 擷取所有可見 NavBackStackEntry 執行個體清單的功能
  • rememberNavController() 現在會使用選用的 Navigator 執行個體組合,系統會將其加入傳回的 NavController,以便更好地支援選用的導航程式,例如來自 Accompanist 導航材質 的導航程式。(I4619e)

修正錯誤

  • 重新建立活動後,動態導航就不會再發生當機。(Ifa6a3b/197942869)
  • 修正系統返回按鈕的問題,即只有在返回包含 NavHost 的可組合目的地後,才會發生此問題。(3ed148b/195668143)
  • SafeArgs 現在會以適當的參數順序產生 fromBundle()fromSavedStateHandle() 的引數。(I824a8b/200059831)

版本 2.4.0-alpha09

2021 年 9 月 15 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha092.4.0-alpha09 版本包含這些修訂版本。

新功能

  • 您現在可以使用 clearBackStack() 方法,清除透過 popBackStack()popUpToSaveState 儲存的任何狀態。(I80a0f)
  • 您現在可以傳遞引數及/或深層連結清單至巢狀結構導航圖的建構工具,它們將會自動加入所產生的圖形。(I8a470b/182545357)

API 異動

  • navArgument Kotlin DSL 函式現在位於 navigation-common 中,而非 navigation-compose。這需要更新匯入才能繼續使用此函式。(I1d095)

行為變更

  • 在產生引數時,Safe Args 現在會優先顯示不含預設值的參數。(I89709b/198493585)

修正錯誤

  • 使用導航 Compose 時,只有在其所有子項為 DESTROYED 時,NavGraphs 才會是 DESTROYED。(I86552b/198741720)
  • 空值 NavDeepLink 引數不再需要使用預設值。(Ia14efb/198689811)
  • 使用新圖形呼叫 setGraph() 時,也將一併清除所有已儲存的返回堆疊,以及先前彈出返回堆疊的行為。(I97f96)
  • 修正問題:OnDestinationChangedListener 執行個體和 currentBackStackEntryFlow 在使用 launchSingleTop 時不會收到通知。(Iaaebc)

依附元件更新

版本 2.4.0-alpha08

2021 年 9 月 1 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha082.4.0-alpha08 版本包含這些修訂版本。

新功能

  • 現在可以擴充 NavType 類別,以便建立自訂 NavTypes。只有在使用程式輔助下(例如透過導航圖 Kotlin DSL)建構導航圖時才支援自訂類型。(I78440b/196871885)

行為變更

  • 在產生操作時,Safe Args 產生的 Kotlin 程式碼現在會優先使用不含預設值的引數,並將預設值設為參數。(Idb697b/188855904)
  • 深層連結現在會驗證 Uri 中是否包含所有必要的引數(不含預設值)。(#204b/185527157)

修正錯誤

  • 使用getBackStackEntrypreviousBackStackEntry在 composable() 中同時使用 remember() 時,也不會導致例外狀況,即返回堆疊中沒有目的地。(I75138b/194313238)
  • 現在當變更返回堆疊引數並使用 launchSingleTop=true 時,導航 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-alpha072.4.0-alpha07 版本包含這些修訂版本。

修正錯誤

  • 現在使用多個返回堆疊功能時,設定變更之後,以及變更圖形時,導航 Compose 可正確儲存狀態。(If5a3d, b/195141957)
  • 使用具備多個返回堆疊的導航 compose 功能時,重新選取同一個分頁後,系統不會顯示空白螢幕。(I860dc, b/194925622)
  • NavHost 現在會觀察 NavBackStackEntryLifecycle.State 發生的變更,也就是說,現在在片段中使用 NavHost,應被改寫為生命週期變更,而不會導致空白螢幕。(I4eb85b/195864489)
  • 修訂問題:重新建立活動之後,關閉 DialogFragment 不會正確更新 NavController 狀態(例如在設定變更之後)。(Icd72b)
  • 修正填入對話方塊目的地時不會更新 NavController 的系統返回按鈕處理作業的問題,可能導致 NavController 攔截返回按鈕,即使沒有任何返回堆疊可以彈出。(If3b34)
  • Safe-args 現在會自動產生可用於測試 ViewModel 程式碼的引數 toSavedStateHandle 方法。(If1e2db/193353880)

版本 2.4.0-alpha06

2021 年 8 月 4 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha062.4.0-alpha06 版本包含這些修訂版本。

API 異動

  • AbstractListDetailFragment 中的 requireSlidingPaneLayout()requireDetailPaneNavHostFragment() 方法已分別重新命名為 getSlidingPaneLayout()getDetailPaneNavHostFragment()。(I34a08)

行為變更

  • 使用動畫(例如 Crossfade)導航時,新目的地的 Lifecycle 只會在動畫完成時到達 RESUMED。(If0543b/172112072b/194301889)
  • 導航 Compose 的 NavHost 現在會將圖形設為第一個組合的一部分。(Ieb7be)

修正錯誤

  • 彈出導航圖的最後一個目的地後,不會再擲回 ClassCastException。(If0543b/172112072b/194301889)
  • 修正問題:當新增不含 Uri 的深層連結及透過路徑或深層連結進行導航時會發生 NullPointerException。(938a0cb/193805425)
  • 修正導航 Compose 問題,其中深層連結 NavBackStackEntry 無法達到 RESUMED 狀態。(I192c5)
  • 修正問題:當彈出對話方塊目的地時不會更新 NavController 的系統返回按鈕處理作業,可能導致 NavController 攔截返回按鈕,即使沒有任何返回堆疊可以彈出。(aosp/1782668)

版本 2.4.0-alpha05

2021 年 7 月 21 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha052.4.0-alpha05 版本包含這些修訂版本。

行為變更

  • 導航 Compose 的 NavHost 現在會在導航目的地時一律使用交叉漸層。(I07049b/172112072)
  • 您現在可以變更 NavHost 圖形。系統會將圖形中具有相同 StartDestination 和目的地的圖形視為等化,且不會清除 NavController 返回堆疊。(I0b8dbb/175392262)

修正錯誤

  • 修正 NoSuchElementException 問題,當從附加至 NavBackStackEntryLifecycleObserver 中呼叫 popBackStack() 時,由於再進入更新為 NavController 的狀態而導致出現問題。(I64621)
  • AbstractListDetailFragment 現已允許 SlidingPaneLayout 不使用 AbstractListDetailFragment 時,也會完全從 APK 中移除。(I611ad)
  • NavGraphNavDestination 現已覆寫等式方法,因此系統會將兩個值相同的物件視為相同。(I166ebb/175392262)

版本 2.4.0-alpha04

2021 年 7 月 1 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha042.4.0-alpha04 版本包含這些修訂版本。

新功能

  • navigation-fragment 成果現在包含透過新版 AbstractListDetailFragment 兩個窗格版面配置 的預建構實作。此片段使用 SlidingPaneLayout 來管理清單窗格(也就是子類別提供的清單)及詳細資料窗格,其使用 NavHostFragment 做為實作,如 實作範例 中所述。(Iac4be, b/191276636)
  • navigation-compose 成果的 NavHost 現在支援 dialog 目的地,而不僅限於 composable 目的地。這些對話方塊目的地都會顯示在可組合 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)

修正錯誤

  • 修正 <include-dynamic> 的問題,傳送至圖形的引數無法正確傳送至動態納入圖形。(I3e115)
  • 修正 NullPointerException 當使用 string[] 引數(含有預設值 @null)導航至目的地時出現的問題(I1fbe8)
  • @Navigator.Name 新增 ProGuard 規則,修正使用 R8 3.1 完整模式時遇到的問題。(I2add9b/191654433)
  • 1.5.0 之前,使用 Kotlin 版本建構應用程式時,SafeArgs 將不再失敗。(Icd1ff, b/190739257)

版本 2.4.0-alpha03

2021 年 6 月 6 日

發佈 androidx.navigation:navigation-*:2.4.0-alpha032.4.0-alpha03 版本包含這些修訂版本。

修正錯誤

  • 修正問題:需要兩次 navigate() 呼叫才能前往隨附的動態圖表。(I7785cb/188859835)
  • 修正導航2.4.0-alpha01中的迴歸問題,當位於頂層目的地時,setupActionBarWithNavController() 不會正確移動 Up 圖示。(I5d443b/189868637)
  • 修正先前在 NavController 的根圖形中呼叫 popBackStack() 後出現 IllegalStateException 的問題。(I2a330b/190265699)
  • 使用 navigation-common 或需要依賴的所有成果時,by navArgs() 的 ProGuard 規則現已正確套用。(I68800b/190082521)
  • OnDestinationChangedListener 首次呼叫 navigate() 時,首次獲得回呼,現在獲得第二個回呼,並導航至目的地。(Ie5f9eb/190228815)
  • Safe Args 在搭配動態功能模組和 AGP 7.0 以上版本使用時,不會再當機。(I69518b/189966576)。

已知問題

  • 使用 Gradle 6.7.0 時,Safe Args 將因為舊版 Kotlin 相依性而失敗,並顯示 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-alpha022.4.0-alpha02 版本包含這些修訂版本。

新功能

  • 路徑現在支援活動、片段和對話方塊位置,以及 DynamicDynamic Kotlin DSL 的路徑。(Ib5544Ia617bI22f96b/188914648b/188901565)
  • NavigationUI 暫時新增實驗性 API,可讓您選擇不儲存狀態。儘管一律儲存狀態是正確的行為,但仍保留已淘汰的程式庫(即保留的片段),但儲存狀態時不支援,因此應用程式會暫時將不支援的 API 轉換下來。(Idf93c)
  • 導航現在提供 findDestination()getHierarchy() API,可用來實作自訂 NavigationUI。findDestination()NavGraph 的擴充功能,可在圖中尋找目的地。getHierarchy()NavDestination 的函式,可用來驗證特定目的地是否位於其他階層 (I2932fb/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • 更新 BottomNavigationView 的 NavigationUI 方法改為採用 Material 1.4.0 (NavigationBarView) 中引入的超類別。這樣即可將這些方法與 NavigationRailView 搭配使用。(Ib0b36b/182938895)

  • 透過 XML 加載 <action> 元素時,動畫屬性可以使用 app:enterAnim="?attr/transitionEnter" 語法從您的主題中提取屬性。(I07bc1b/178291654)

API 異動

修正錯誤

  • DialogFragmentNavigator 現在使用 NavigatorState.pop() API 來通知 NavController 在對話方塊被關閉或按下按鈕外的對話方塊關閉時,NavController 狀態一律會與 Navigator 的狀態保持同步。(I2ead9)
  • 使用 onDestinationChanged 回呼操縱 OnDestinationChangedListeners 的清單時,導航不會再提供 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-alpha012.4.0-alpha01 版本包含這些修訂版本。

新功能

  • NavController 上的 currentBackStackEntryAsFlow() 方法提供的 Flow 會在目前的 NavBackStackEntry 改變時出現。 您可以把此流程做為手動管理 OnDestinationChangedListener 的替代選項。(I19c4a, #89, b/163947280)

多個返回堆疊

NavController 負責管理目的地的返回堆疊,因此當您 navigate() 至其堆疊位置時在返回堆疊中新增目的地,而在呼叫 popBackStack() 或觸發系統後,就會移除這些目的地。現有 NavOptions 類別和在導航圖 XML 中整合至 <action> 條目,已擴大至支援儲存和還原返回堆疊。(b/80029773)

作為本次異動的一部分,onNavDestinationSelected()BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController()NavigationUI 方法現在會自動儲存並還原彈出目的地的狀態,因此無需任何程式碼變更即可支援多個返回堆疊。將「片段」與「導航」搭配使用時,這是與多個返回堆疊整合的首選方式。(Ie07ca)

儲存和還原狀態的基礎 API 會透過數種途徑呈現:

  • 在導航 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 建構工具 中加入 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 支援儲存及還原其自己的狀態。

導航 Compose 中用於 composable 目的地的 ComposeNavigator 和用於導航的 <fragment> 目的地中的 FragmentNavigatorDynamicFragmentNavigator 已更新為使用新的 Navigator API,並支援儲存以及還原狀態。

導航路線

路徑 是專門用來識別目的地的 String。雖然先前已在 導航 Compose 中使用,但這個概念現已升級,成為核心導航 API 的一部分。透過 導航 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)

如果開發人員已經從舊版導航 Compose 應用程式升級為導航 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 異動

  • 所有導航成果均已在 Kotlin 中重新編寫。這進一步改善了使用一般化的類別(例如 NavType 子類別)的空值。所有先前屬於 -ktx 成果的 Kotlin 擴充功能,都已移至各自的主要成果中。-ktx 成果會繼續發布,但不會有任何內容。(b/184292145)
  • NavDeepLinkBuilder 現在支援在產生的返回堆疊中加入多個不同的目的地。(I3ee0d, b/147913689)
  • DynamicNavHostFragment 新增出廠函式 (Icd515b/175222619)
  • NavBackStackEntry 的專屬 ID 現已計入其公開 API 的一部分。(Ie033a)
  • NamedNavArgumentnameargument 欄位以及銷毀函式現已公開。(#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)

行為變更

  • 導航現在取決於生命週期 2.3.1,現在會標示為 setGraph()popBackStack()navigateUp()navigate(),將 NavBackStackEntry Lifecycle 更新為 @MainThread 的方法,使導航功能符合生命週期 2.3.0 中引入的主要執行緒強制執行功能。(b/171125856)
  • 從深層連結剖析 Enum 引數現在不區分大小寫,允許使用類似於 http://www.example.com/red 的深層連結比對 www.example.com/{color} 深層連結,即使列舉的值 為RED。(#152, b/135857840)

Compose 相容性

  • androidx.navigation:navigation-compose:2.4.0-alpha01 只與 Compose 1.0.0-beta07 及以上的版本相容。

修正錯誤

  • 修正問題:結尾的預留位置優先於含有比對完全符合後置字串的深層連結。(#153, b/184072811)
  • NavHostFragment 現已支援使用相同 @Navigator.Name("dialog") 作為預設 DialogFragmentNavigator 的自訂導航器。(Ib1c2c, b/175979140)
  • 改善 NavigatorProvider#addNavigator 的行為,確保再次呼叫同一個執行個體不會造成問題。(#176, b/187443146)

外部貢獻

  • 藉助 simonschiller 建構對 Safe Args 的支援,為各個 NavArgs 類別產生 fromSavedStateHandle() 方法。(#122, b/136967621)
  • 藉助 Bradleycorn 可以從深層連結不區分大小寫剖析 enum 引數。(#152, b/135857840)
  • 藉助 osipxd 修正問題,即後端引數預留位置優先於含有完全相符後置字串的深層連結。(#153, b/184072811)
  • 藉助 tatocaster 更新 Safe Args 取決於 KotlinPoet 1.8.0。(#172, b/183990444)
  • 藉助Jossiwolf,讓 nameargument 欄位解構為公開 NamedNavArgument 的函式。(#174, b/181320559)
  • 藉助jossiwolf推出新的 NavBackStackEntry#provideToCompositionLocals 擴充功能,為相關組合變數提供 NavBackStackEntry。(#175, b/187229439)
  • 藉助 jossiwolf 提升 NavigatorProvider#addNavigator 的行為,確保同樣的執行個體重複呼叫不會造成問題。(#176, b/187443146)

版本 1.0.0-alpha10

2021 年 4 月 7 日

androidx.navigation:navigation-compose:1.0.0-alpha10發佈。1.0.0-alpha10 版本包含這些修訂版本。

API 異動

  • NavHost現在接受Modifier,會傳遞至會包含目的地組合的可組合容器。(I85aca, b/175125483)

修正錯誤

  • 即使沒有 OnBackPressedDispatcherOwner,連 NavHost 也可以運作,例如預覽 NavHost 時也是如此。(I7d8b4)
  • 導航 Compose 現在會根據導航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(例如 viewModel()NavHost)的 API 在未設定 ViewModelStoreOwner 時仍會擲回例外狀況。(Idf39a)

修正錯誤

  • 導航 Compose 現在取決於導航 2.3.4,其中包括修正了在設定圖形之後嘗試設定相同 ViewModelStore 物件的問題。(I65c24, b/177825470)

版本 1.0.0-alpha08

2021 年 2 月 24 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha081.0.0-alpha08 版本包含這些修訂版本。

新功能

  • NavHost 現在會將 LocalSavedStateRegistryOwner 的 CompositionLocal 填入該目的地的 NavBackStackEntry,確保除了直接儲存在 SavedStateRegistry 中的任何狀態,都會在目的地間儲存及還原。(I435d7, b/179469431)

版本 1.0.0-alpha07

2021 年 2 月 10 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha071.0.0-alpha07 版本包含這些修訂版本。

依附元件更新

版本 1.0.0-alpha06

2021 年 1 月 28 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha061.0.0-alpha06 版本包含這些修訂版本。

API 異動

  • NavController 上新增 getBackStackEntry(route: String) 擴充功能方法,以傳回相關聯的 NavBackStackEntry。(If8931)

版本 1.0.0-alpha05

2021 年 1 月 13 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha051.0.0-alpha05 版本包含這些修訂版本。

更新以依附 Compose 1.0.0-alpha10。

1.0.0-alpha04 版本

2020 年 12 月 16 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha041.0.0-alpha04 版本包含這些修訂版本。

  • 已更新與 Compose 1.0.0-alpha09 的相容性。

版本 1.0.0-alpha03

2020 年 12 月 2 日

發布 androidx.navigation:navigation-compose:1.0.0-alpha031.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-alpha021.0.0-alpha02 版本包含這些修訂版本。

API 異動

  • 導航 compose 現在支援使用 POPUpTo 以及 launchSingleTop 作業 (If96c3b/171468994)
  • 新增導航功能,其採用路徑而非 ID,可以在導航 Compose DSL 中建構巢狀結構圖形。(I1661d)
  • startDestination 現在會顯示在 NavHost (Ie620e) 參數清單的路徑中
  • 您現在可以使用路徑做為 NavHost 可組合元素之外的起點目的地。(Iceb75)

版本 1.0.0-alpha01

2020 年 10 月 28 日

發布 android.navigation:navigation-compose:1.0.0-alpha011.0.0-alpha01 版包含這些修訂版本。

新功能

navigation-compose 成果可提供 導航元件Jetpack Compose 之間的整合。它使用 @Composable 函式做為應用程式的目的地。

初始版本提供以下功能:

  • NavHost 可組合元件,可讓您透過 Kotlin DSL 建構導航圖。
  • 設定生命週期、ViewModel 以及已記錄的狀態儲存於目的地層級的範圍。
  • 自動與系統返回按鈕整合。
  • 支援傳遞引數、將深層連結附加至目的地,以及將結果傳回先前的目的地。
  • rememberNavController()currentBackStackEntryAsState() 中編寫特定輔助程式,以允許 提升狀態,並將 NavControllerNavHost 之外的可組合元件(例如底部導航列)建立連結。

詳情請參閱 Compose 導航指南

版本 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 從引數中獲取意圖,為適用於外部深層連結的函式建立鏡射。(I975c3, b/181521877)

修正錯誤

  • OnBackPressedCallbacks 已新增至含有 NavBackStackEntry 的發送器,因為 LifecycleOwner 會在活動生命週期為 STOPPED,以及STARTED 之後正確攔截 (Iff94fb/182284739 )
  • 深層連結網域剖析現在不區分大小寫,確保 www.example.comwww.example.comwww.Example.com 相符。請注意,查詢參數名稱有大小寫之分。(#144, b/153829033)
  • 修正問題:當目的地有多個不可空值的預設引數時,只覆寫該引數的子集而導航至該目的地時,就會發生 NullPointerException。(aosp/1644827)

依附元件更新

外部貢獻

版本 2.3.4

版本 2.3.4

2021 年 3 月 10 日

androidx.navigation:navigation-*:2.3.4 發佈。2.3.4 版包含這些修訂版本。

新功能

  • 作為深層連結 URI 的一部分傳送時,現在可以正確剖析 ReferenceType 引數。這同時支援原始整數值以及 0x 開頭的十六進位值。(#127, b/179166693)
  • 包含 app:argType="float" 的引數的 android:defaultValue 現已支援整數預設值,因此您可以使用 android:defaultValue="0",不需要使用 0.0。(#117, b/173766247)

修正錯誤

  • 修正了使用導航支援動態功能時,會阻礙安裝進度的問題。(Ib27a7, b/169636207)
  • 使用已經設定的相同物件呼叫 setViewModelStoresetLifecycleOwner 時,無法執行任何操作 (Idf491b/177825470)
  • Safe-Args 在使用 Java 時,會在適當的方法中加入超低註解。(I8fbc5, b/179463137)

外部貢獻

  • 藉助 JvmName,發出提取要求,以確保當系統作為深層連結 URI 的一部分傳送時,能夠正確剖析 ReferenceType 引數。(#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 中的迴歸問題,如果使用 <activity> 目的地搭配 onNavDestinationSelected 將無法前往活動。(I22e34, b/171364502)
  • 修正問題:navigation-dynamic-features-fragment 會多次前往新安裝的目的地。(aosp/1486056, b/169636207)
  • 修正了在使用 launchSingleTop 時,預設引數不會傳送至 OnDestinationChangedListener 執行個體的問題。(I2c5cb)
  • 修正問題:前往巢狀結構圖時,無法在返回堆疊上建立新的圖形執行個體。(Ifc831)
  • 修正問題:使用 navigate() 搭配 popUpTo 在導航圖中移除最後一個目的地時,系統不會立即在返回堆疊中刪除及移除導航圖本身。(I910a3)
  • 導航 SafeArgs 現已採用 KotlinPoet 1.7.2 版,新增支援 Kotlin 的明確 API 模式。(I918b5)
  • NavHostFragment.findNavController(Fragment) 除了檢查片段階層和片段的檢視區塊階層的現有檢查之外,現在也會檢查 DialogFragment 的根層級檢視畫面。這樣,您可以透過 FragmentScenarioNavigation.setViewNavController() 對使用導航的對話方塊片段進行測試。(I69e0d)

版本 2.3.1

版本 2.3.1

2020 年 10 月 14 日

androidx.navigation:navigation-*:2.3.1 發佈。2.3.1 版包含下列修訂版本。

新功能

  • 預設的動畫工具資源已新增至導航 UI,且建議使用預設的動畫資源。(b/167430145)
  • NavOptions 現在可以覆寫雜湊程式碼和等化方法 (b/161586466)
  • 導航現已在「無目的地含有 ID」的 LegalArgumentException 中加入目前目的地,以便改善開發人員偵錯體驗。(b/168311416)

修正錯誤

  • 即使產生的引數類別名稱長度超過 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-runtimenavigation-dynamic-features-fragment 成果可讓您前往功能模組中定義的目的地,並視需要自動處理功能模組的安裝作業。詳情請參閱使用功能模組導航
  • 導航測試navigation-testing 成果會提供 TestNavHostController 來讓您設定目前的目的地,並在導航作業完成之後驗證返回堆疊。詳情請參閱測試導航一節。
  • 傳回結果:現在與導航返回堆疊中的每一個目的地相關的 NavBackStackEntry,都可用於存取適合儲存少量儲存狀態的 SavedStateHandle,其應該與特殊返回堆疊條目有關。詳情請參閱將結果傳回先前的目的地一文。
  • NavigationUI支援Openable:位於 NavigationUI 中的所有 DrawerLayout 用量已替換為更多一般化 Openable 介面,其新增於 CustomView1.1.0中,由位於導航匣版面配置1.1.0中的 DrawerLayout 實作。
  • 深層連結中的操作和 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 包含這些修訂版本。

修正錯誤

  • 修正 NullPointerException 的問題,即當用另一個引數為 singleTop 的執行個體取代不含引數的目的地的執行個體。(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 包含這些修訂版本。

修正錯誤

  • 修正了 NavBackStackEntryLifecycle 在程序結束之後無法準確更新的問題。(b/155218371)
  • OnDestinationChangedListener 呼叫 setGraph() 前已註冊的執行個體現在可以在程序完成後,正確傳送還原的目的地。(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/136573074, b/135334841)

API 異動

  • 大幅提升 Kotlin DSL 對動態導航目的地的支援。(b/148969800)

修正錯誤

  • 修正問題:使用巢狀結構起始目的地時,深層連結意圖會遭到忽略。(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)
  • 導航圖形 Kotlin DSL 現在會顯示 defaultArguments Map 操作,建立功能鏡射,讓您能夠在導航 XML 檔案的 <action> 元素上設定預設值。(b/150345605)

修正錯誤

  • 導航 2.2.2開始:修正了 IllegalStateException 問題,即當活動中有多個 NavHostFragment 執行個體時,透過深層連結連結至圖形的起始目的地。(b/147378752)

依附元件更新

2.3.0-alpha04 版本

2020 年 3 月 18 日

androidx.navigation:navigation-*:2.3.0-alpha04 發佈。2.3.0-alpha04 版本包含這些修訂版本。

新功能

  • 現已支援功能模組活動,以及導航 Kotlin DSL 中的片段目的地。(b/148969800)

API 異動

  • DynamicExtras 類別已不再使用建構工具模式,現在可以直接建構。(aosp/1253671)
  • DynamicActivityNavigator 現可在其建構函式中使用 Context,而不是 Activity。(aosp/1250252)

修正錯誤

  • NavigationUI 不再忽略空白標籤(例如含有 android:label=”” 的目的地),現在會將標題正確設定為空字串。(b/148679860)

依附元件更新

  • 導航動態功能成果現在取決於 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 異動

修正錯誤

  • navigation-common-ktx ProGuard 規則現在只會正確保留使用的 NavArgs 類別,而非所有 NavArgs 執行個體。(b/150213558)

依附元件變更

  • 導航功能已在核心 1.2.0 上還原其依附元件,現在要改用核心 1.1.0,以避免當導航不使用核心 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)

修正錯誤

  • 現在,當在自己的工作堆疊中推出應用程式時,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 類別。這個類別提供另一種使用模擬 NavController 的替代選項,當測試導航可讓您設定目前目的地,並在導航作業完成後驗證返回堆疊。(b/140884273)
  • 全新的navigation-dynamic-features-fragment(及其轉換依附元件,navigation-dynamic-features-runtime)允許加入目的地或整個導航圖(透過 <include-dynamic>)從功能模組,在導航至目的地時讓使用者能夠依需求無縫安裝隨選功能模組。詳情請參閱使用功能模組導航。(b/132170186)

修正錯誤

  • 導航2.2.1起:不含查詢參數的深層連結現在可正確忽略任何查詢參數,而不會將其附加在 {argument} 元素後方或與深層連結不符。(b/147447512)
  • 導航2.2.1起:DrawerArrowDrawablenavigation-ui ProGuard 規則已更新,確保不需要使用 android.enableJetifier=true。(b/147610424)
  • 導航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.22.2.2 版包含下列修訂版本。

修正錯誤

  • 已修正 IllegalStateException 問題:即當活動中有多個 NavHostFragment 執行個體時,透過深層連結連結至圖形的起始目的地。(b/147378752)
  • NavigationUI 不再忽略空白標籤(例如含有 android:label=”” 的目的地),現在會將標題正確設定為空字串。我們先前已在 導航 2.3.0-alpha04 中推出這項功能。(b/148679860)
  • navigation-common-ktx ProGuard 規則現在只會正確保留使用的 NavArgs 類別,而非所有 NavArgs 執行個體。我們先前已在 導航 2.3.0-alpha03 中推出這項功能。(b/150213558

依附元件更新

版本 2.2.1

版本 2.2.1

2020 年 2 月 5 日

發佈 androidx.navigation:navigation-*:2.2.12.2.1 版包含這些修訂版本

修正錯誤

  • 不含查詢參數的深層連結現在可正確忽略任何查詢參數,而不會將其附加在 {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.02.2.0 版含有這些修訂版本

2.1.0 版之後的重要異動

  • NavBackStackEntry:您現在可以呼叫 NavController.getBackStackEntry(),在返回堆疊上傳送目的地 ID 或導航圖 ID。傳回的 NavBackStackEntry 會提供導航驅動的 LifecycleOwnerViewModelStoreOwner(與 NavController.getViewModelStoreOwner() 傳回的相同)及 SavedStateRegistryOwner,此外還提供用來啟動該目的地的引數。
  • 生命週期 ViewModel SavedState 整合SavedStateViewModelFactory 已經使用並預設使用 by navGraphViewModels()ViewModelProvider 搭配 ViewModelStoreOwner 退貨人:NavController.getBackStackEntry()NavController.getViewModelStoreOwner() 的 Google Ads 新帳戶重新申請驗證。
  • 深層連結的查詢參數支援:現在起,包含查詢參數的深層連結現在支援重新排序的查詢參數;具有預設值或可為空值的引數現在能用於比對深層連結。
  • 完善動畫支援功能NavHostFragment 現在使用 Fragment 1.2.0FragmentContainerView,修正了動畫 Z 排序問題以及將視窗插邊分到片段的問題。

2.2.0-rc04 版本

2019 年 12 月 18 日

發佈 androidx.navigation:navigation-*:2.2.0-rc042.2.0-rc04 版包含這些修訂版本

修正錯誤

版本 2.2.0-rc03

2019 年 12 月 4 日

發佈 androidx.navigation:navigation-*:2.2.0-rc032.2.0-rc03 版本包含這些修訂版本。

修正錯誤

  • 修正深層連結剖析問題:以往使用查詢參數和引數做為路徑的最後一部分時,系統會自動剖析最終路徑引數的多個半型字元。(b/144554689)
  • 修正深層連結剖析問題,選用參數會接收 "@null",而不是 null。(b/141613546)
  • NavHostFragment 現在搭配 FragmentContainerView 變更設定後,可正確還原圖形。(b/143752103)

依附元件變更

  • 導航目前取決於生命週期 2.2.0-rc03、ViewModel SavedState 1.0.0-rc03、活動 1.1.0-rc03 以及片段 1.2.0-rc03(如適用)。

版本 2.2.0-rc02

2019 年 11 月 7 日

發佈 androidx.navigation:navigation-*:2.2.0-rc022.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-beta012.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-alpha032.2.0-alpha03 版本包含這些修訂版本

行為變更

  • 呼叫 setGraph 之後呼叫 setViewModelStore() 會產生 IllegalStateException。這個值應一律在初始設定時由 NavHost 設定,以確保所有 NavBackStackEntry 執行個體的 ViewModel 執行個體的儲存空間一致。(aosp/1111821)

修正錯誤

  • 修正 ConcurrentModificationException 問題:在使用 ViewModel 時,執行個體會指派給多個不同導航圖範圍的 ViewModelStore 執行個體。(aosp/1112257)

2.2.0-alpha02 版本

2019 年 9 月 5 日

發佈 androidx.navigation:navigation-*:2.2.0-alpha02。您可以前往 這裡 查看這個版本包含的修訂版本。

新功能

  • 含查詢參數的深層連結現已支援重新排序的查詢參數;具有預設值或可為空值的引數現在可選擇用於比對深層連結。(b/133273839)
  • 現在可以呼叫 NavController.getBackStackEntry(),以傳入返回堆疊上的目的地 ID 或導航圖 ID。傳回的 NavBackStackEntry 會提供導航驅動的 LifecycleOwnerViewModelStoreOwner(與 NavController.getViewModelStoreOwner() 傳回的相同)及 SavedStateRegistryOwner,此外還提供用來啟動該目的地的引數。(aosp/1101691aosp/1101710)

修正錯誤

  • 修正了透過 IllegalArgumentExceptionNavHostFragment 新增至 ViewPager2 時作業失敗的問題。(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 異動

修正錯誤

  • NavHostFragment 現使用 FragmentContainerView,修正了動畫 Z 排序問題,以及視窗觸發作業會轉移至片段的問題。(b/137310379)

版本 2.1.0

版本 2.1.0

2019 年 9 月 5 日

發佈 androidx.navigation:navigation-*:2.1.0。您可以前往 這裡 查看這個版本包含的修訂版本。

自 2.0.0 版以來的重要異動

  • 將 ViewModels 的範圍限定在導航圖中:現在可以建立 ViewModel,其範圍在導航圖層級,使用 by navGraphViewModels() 屬性分配,用於 Kotlin 使用 -ktx 程式庫的用戶,或透過 getViewModelStoreOwner() API 新增至 NavController。詳情請參閱 在目的地之間共用 UI 相關資料
  • 對話方塊目的地:現在可以建立 <dialog> 目的地,它將在 navigate 到它們時顯示 DialogFragmentNavHostFragment 預設支援對話方塊目的地。如需詳細資訊,請參閱 透過 DialogFragment 建立目的地
  • 使用 Uri 導航:現在可以使用 Urinavigate,以使用新增至目的地的 <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。您可以前往 這裡 查看這個版本包含的修訂版本。

修正錯誤

  • 移除 2.1.0-beta01 中意外引入的 Jacoco 依附元件。(b/137782950)

版本 2.1.0-beta01

2019 年 7 月 17 日

發佈 androidx.navigation:*:2.1.0-beta01。您可以前往 這裡 查看這個版本包含的修訂版本。

新功能

  • NavigationUI 現在可以動畫移除 Up 按鈕,同時使用 setupWithNavController()ToolbarCollapsingToolbarLayout 搭配使用。(b/131403621)

修正錯誤

  • 修正計時問題,當在 findNavController() 中使用相同容器的多個 NavHostFragments 時,會發生計時問題。(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 已淘汰,並改用會傳回 ViewModelStoreOwner 的新 getViewModelStoreOwner() 方法。(aosp/987010)
  • 實作浮動視窗目的地,例如 <dialog> 目的地,已一般化為標記介面,FloatingWindow,所有 <dialog> 目的地現在都已完成實作。與頂部應用程式列互動的 NavigationUI 方法現在會忽略 FloatingWindow 目的地。(b/133600763)

行為變更

  • 當使用 <dialog> 目的地時,導航功能會正確同步處理螢幕上顯示的內容。因此,當導航至非對話方塊及非活動目的地時,例如 <fragment> 目的地,導航功能會自動彈出 <dialog> 目的地。(b/134089818)

修正錯誤

  • 在處理深層連結及重新建立活動時,導航現在會隱藏動畫,並修正影像內容刷新。(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() 方法已替換為 NavHostControllersetOnBackPressedDispatcher() 方法,現在,必須先呼叫 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,並修正 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" b/132077777,NavHostFragment 會繼續攔截系統返回按鈕

新功能

  • 你現在可以建立 <dialog> 目的地,當 navigate 時會顯示 DialogFragmentNavHostFragment 預設支援對話方塊目的地。b/80267254
  • 除了使用資源 ID 或 NavDirections 執行個體呼叫 navigate 之外,現在也可以透過 Uri 進行導航,而後者會使用新增至目的地的 <deepLink>,以前往正確的目的地。b/110412864

行為變更

  • NavigationUI 提供的預設動畫已經從 400ms 加速到 220ms,以便配合活動和片段的預設動畫速度。b/130055522

API 異動

  • NavHostFragmentcreateFragmentNavigator() 方法已被淘汰,其功能也已移至新的 onCreateNavController() 方法,更清楚地指出了在子類別 NavHostFragment 中新增自訂導航器的正確進入點。b/122802849
  • 已將 hasDeepLink() 方法新增至 NavDestination,方便您檢查該目的地是否能處理特定 Uri;如果為 NavGraph,則可查看導航圖的中的任何目的地。b/117437718

修正錯誤

  • 預設引數現在可正確傳送至 OnDestinationChangedListener 執行個體。b/130630686
  • NavHostFragment 現在會透過 OnBackPressedDispatcher 攔截系統返回事件,並修正了問題,即回傳片段後,會使用片段生命週期方法進行有條件的導航。b/111598096
  • 對 Safe Args 來說,android:defaultValue=”@null” 及未指定 app:argType 現已正確推論為 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

修正錯誤

  • <activity> 目的地的 android:name 將不再於加載時剖析為類別,從而在使用動態功能時可防止 ClassNotFoundExceptions。b/124538597

版本 2.1.0-alpha01

2019 年 3 月 19 日

這是導航 2.1.0 的第一個 Alpha 版本。

依附元件變更

  • 導航功能現在取決於 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 對片段執行個體化。b/119054429

修正錯誤

  • 如果目的地已附加引數,導航不會再傳送空值 Bundle,會在使用 android:defaultValue="@null" 時修正問題。b/128531879
  • Safe Args 現在仰賴 KotlinPoet 1.1.0,修正了套件名稱過長的問題。b/123654948

版本 2.0.0

版本 2.0.0

2019 年 3 月 14 日

導航 2.0.0 已發佈,且 2.0.0-rc02 沒有任何變更。

版本 2.0.0-rc02

2019 年 3 月 6 日

導航 2.0.0-rc02 提供具有 androidx.navigation 群組 ID 的新成果,將依附元件變更為 Android 對等項目。

2.0.0-rc02 的行為與導航 1.0.0-rc02 的行為一致,除了從 1.0.0-rc02 進行更新外,也不需要對程式碼進行其他變更,已符合 新依附元件

專案必須 遷移至 AndroidX,才能使用 2.X 版本的導航功能。導航 1.0 穩定版是支援資料庫依附元件的最後一個版本;未來 1.0 之後的所有開發作業都將以 AndroidX 為基礎,並採用 2.0 穩定版為基礎。

AndroidX 之前的依附元件

使用 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 日

導航 1.0.0 已發佈,且 1.0.0-rc02 沒有任何變更。

版本 1.0.0-rc02

2019 年 2 月 26 日

這是導航 1.0.0 穩定版的第二個發布版本。這個版本包含一些錯誤修正。

修正錯誤

  • 修正問題:如果根圖形沒有 ID b/126251695,系統將忽略 popBackStack()
  • 現在,當處理不含 FLAG_ACTIVITY_NEW_TASK 的深層連結後,呼叫 navigateUp() 可正確導航至應用程式工作 b/126082008
  • 修正問題:ActivityNavigator.applyPopAnimationsToPendingTransition 無法套用正確的彈出式結束動畫的問題 b/126237567
  • Safe Args 產生的 Kotlin 程式碼現在會在與 R 類別相關聯的套件名稱中,正確逸出 Kotlin 關鍵字(例如 infun)。b/126020455

版本 1.0.0-rc01

2019 年 2 月 21 日

這是導航 1.0.0 穩定版的候選版本。這個版本包含一個錯誤修正。

修正錯誤

  • 修正了使用片段即 singleTop 導航作業時出現的問題b/124294805

版本 1.0.0-beta02

2019 年 2 月 12 日

這個版本包含幾項細微改善,以及重大錯誤修正。

新功能

  • 現在,可以使用 0 做為 reference 引數的 android:defaultValueb/124248602

行為變更

  • 完全相符的深層連結現在會優先於含有 .* 或引數比對的深層連結。b/123969518

修正錯誤

  • 現在,popBackStack()navigateUp 會在彈出返回堆疊上的最後一個目的地時傳回 false,從而修正了 1.0.0-beta01 中產生的迴歸。b/123933201
  • 現在,當還原儲存的執行個體狀態時,導航將正確設定 ClassLoader,避免在 Navigator 儲存狀態中,或傳送至 NavDestination 的引數中使用自訂類別時發生問題。b/123893858
  • 從已儲存的執行個體狀態還原 Parcelable[] 引數時,Safe Args 產生的 NavArgs 類別不會再停止運作。b/123963545
  • Safe Args 現在可妥善清理不必要的 Kotlin 類別。b/124120883

版本 1.0.0-beta01

2019 年 2 月 4 日

這是導航的第一個測試版;除非出現重大問題,否則導航 API 預計在下一個版本前都會保持穩定。這個版本包含一些錯誤修正及行為變更。

行為變更

  • 導航功能現在可確保在執行階段和 Safe Args 過程中,將引數預設值視為相同。因此,只有具備 app:argType="reference" 的引數可以擁有指向其他資源(例如 @color/colorPrimary)的預設值,在嘗試使用參考預設值搭配不同 app:argType 時,會導致剖析 XML 時產生例外狀況。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 進行模糊處理時,系統不會顯示 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 的 hotfix 版本,修正了 Safe Args 的問題。

修正錯誤

  • 修正問題:Safe Args 無法匯入與全域操作相關聯的路線類別。b/123307342

版本 1.0.0-alpha10

2019 年 1 月 23 日

已知問題

  • Safe Args 無法匯入與全域操作相關聯的路線類別。b/123307342

這個版本包含重大 API 變更;請參閱下方的 重大變更 一節。

新功能

  • Kotlin 使用者現在可利用 by navArgs() 屬性委派,以獲得 Safe Args 參考,以及在 ActivityFragment 中產生 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

重大變更

  • 將彈出動畫套用至活動的 NavOptions.applyPopAnimationsToPendingTransition() 方法已移至 ActivityNavigatorb/122413117
  • Safe Args 現在可避免重複複製相同的操作類別,而不會執行任何引數。在產生的 NavDirections 類別中,沒有任何引數方法的傳回類型是 NavDirectionsb/123233147
  • Safe Args 產生的「路線」類別已沒有公開的建構函式,因此您只能與產生的靜態方法互動。b/123031660
  • Safe Args 產生的 NavDirections 類別不再有公開建構函式 - 只能透過產生的路線類別中的靜態方法產生。b/122963206
  • NavDirectionsgetArguments() 傳回的 Bundle 現已標示為 @NonNull,而非 @Nullableb/123243957

修正錯誤

  • NavDeepLinkBuilder 現在會使用您傳遞的引數來判斷獨特性,以正確處理多個目的地 PendingIntentb/120042732
  • NavController 現在使用巢狀結構 NavHostFragment 或其他帶有返回堆疊的子片段時,能正確處理 popBackStack() 作業。b/122770335
  • NavigationUI 現在會正確設定向上按鈕的內容說明。b/120395362
  • Safe Args 產生的「路線」類別現在可正確處理與目的地操作相同的 ID 的全域操作。b/122962504
  • equals() 傳回 true 時,Safe Args 產生的 NavDirections 類別現在會擁有相同的 hashCode() 值。b/123043662
  • 如果您嘗試在 NavHostFragmentFragmentManager 中自訂 FragmentTransactionsFragmentNavigator 現在會傳回更優質的錯誤訊息。請一律使用 getChildFragmentManager()b/112927148

版本 1.0.0-alpha09

2018 年 12 月 18 日

這個版本包含重大 API 變更;請參閱下方的 重大變更 一節。

我們決定不繼續開發 android.arch.navigation:navigation-testing 構件。雖然經證明這對 NavController 的內部測試有幫助,但我們強烈建議採用其他測試策略 (例如模擬 NavController 執行個體),以驗證目前進行的 navigate() 呼叫正確無誤。2018 年 Android 開發人員高峰會的單次活動講座 詳細討論了這種做法,而我們也會專門針對導航測試提供更多說明文件。

新功能

  • menuCategory="secondary"MenuItem 搭配 NavigationUI 使用時,不會再彈出返回堆疊。b/120104424
  • AppBarConfiguration 現在可讓您設定備用的 OnNavigateUpListener 執行個體,於 navController.navigateUp() 傳回 false 時進行呼叫。b/79993862 b/120690961

重大變更

  • 使用 <argument> 搭配 argType="reference" 時,Navigation 不會再剖析參考資料,而會改為提供原始資源 ID 本身。b/111736515
  • 根據預設,onNavDestinationSelected() 現在會彈回導覽圖的起始目的地,與 setup 方法維持一致。為 MenuItem 新增 menuCategory="secondary",以免彈出返回堆疊。aosp/852869
  • 所產生 Args 類別的 fromBundle() 方法現在接受非空值的 Bundle,取代可為空值的 Bundleaosp/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 已重新命名為 OnDestinationChangedListenerb/118670572
  • OnDestinationChangedListener 現在也會傳遞引數的 Bundleaosp/837142
  • 移除了 app:clearTaskapp:launchDocument 屬性及其相關方法。您可以將 app:popUpTo 與圖表根層級搭配使用,來移除返回堆疊中的所有目的地。b/119628354
  • ActivityNavigator.Extras 現在採用 Builder 模式,並加入可設定任何 Intent.FLAG_ACTIVITY_ 標記的功能。aosp/828140
  • NavController.onHandleDeepLink 已重新命名為 handleDeepLinkaosp/836063
  • 許多不適用於設定子類別的類別和方法 (例如 NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration) 皆已設為 finalaosp/835681
  • 移除了已淘汰的 NavHostFragment.setGraph() 方法。aosp/835684
  • 移除了已淘汰的 NavigationUI.navigateUp(DrawerLayout, NavController) 方法。aosp/835684
  • Fragment 建立程序已移至 FragmentNavigator,以便將 Fragment 建立程序委派給 FragmentFactoryb/119054429
  • NavGraphNavigator 的建構函式不再接受 Contextaosp/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 屬性現在可為引數填入非 String 引數,方法是呼叫 toString() b/120161365

Safe Args

  • Secure Args 支援可序列化物件,包括 Enum 值。Enum 類型可以使用列舉常值來設定預設值,無須使用類別名稱 (例如 app:defaultValue="READ") b/111316353
  • 只要是 Safe Args 支援的類型,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 使用慣例,但您可以繼續使用該 API 執行以 Java 編寫的測試。
  • 不再支援中繼資料資訊清單註冊導覽圖。b/118355937
  • 無法再將動作附加至 <activity> 目的地。aosp/785539

修正錯誤

  • 深層連結現在可正確地剖析查詢參數。b/110057514
  • Activity 目的地現在可正確地套用所有進入與退出的動畫。b/117145284
  • 修正了使用自訂 Navigator 時因設定變更而發生的異常終止問題。b/110763345

Safe Args

  • Safe Args 現在可以固定依附於 Android Gradle 外掛程式 3.2.1。b/113167627
  • 現在可以為內部類別產生 Directions。b/117407555
  • 修正了無法順利產生 Directions 並加到 <include> 導航圖的問題。b/116542123

版本 1.0.0-alpha06

2018 年 9 月 20 日

新功能

API 變更

  • 重大變更: Navigator navigate() 方法現在接受 Navigator.Extras 參數。
  • NavController 的 getGraph() 方法現在為 NonNullb/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
  • 修正將資源 ID 轉換成 Java 名稱時發生的問題。b/111602491
  • 修正 Safe Args 外掛程式中針對是否可為空值顯示的錯誤訊息。
  • 新增遺漏的是否可為空值註解。

1.0.0-alpha04 版本

2018 年 7 月 19 日

Navigation 1.0.0-alpha04 和相關聯的 Safe Args Gradle 外掛程式包含多項 API 變更、行為變更和錯誤修正。

API/行為變更

  • NavHostFragment 一律會將目前的 Fragment 設為主要導覽片段,以確保先彈出子項片段管理員,再彈出外部的 NavController 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

修正錯誤

  • 修正了透過深層連結連往片段目的地後發生的系統返回按鈕問題 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
  • 重大變更: 現在系統預設會將引數視為非空值。想讓字串和可剖析引數使用空值,請新增 app:nullable="true" b/79642307
  • 您現在可以使用 app:type="long",defaultValue 的格式為「123L」 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 值都是以 String 形式傳遞的問題 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

修正錯誤

  • 修正了在透過 Fragment 生命週期方法呼叫 navigate 時發生的 IllegalStateExceptionb/79632233

  • Navigation 現在依附於支援資料庫 27.1.1,以修正使用動畫時的閃爍問題。b/80160903

  • 修正了在使用 defaultNavHost="true" 做為子項片段時發生的 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