導航
最近更新時間 | 穩定版 | 候選版 | 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-beta01
。2.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-alpha04
。2.5.0-alpha04 版本包含這些修訂版本。
API 異動
visibleEntries
已不再處於實驗階段。(I4829f, b/225394514)
修正錯誤
- NavHost 現在取決於
NavController
中的visibleEntries
,以決定要撰寫的項目。這表示在使用巢狀的 NavHost 時,內部的NavHost
現已可正確顯示動畫效果。(I4ba2b, b/225394514) - 由
NavController
提供的visibleEntries
StateFlow
現在會依據生命週期狀態的上限,而非目前的生命週期狀態。亦即即使navController
的代管生命週期變成低於 STARTED,可見的項目清單仍會維持不變。(I9e2a8, b/225394514) SavedStateViewFactory
現在支援使用CreationExtras
(即使已透過SavedStateRegistryOwner
初始化)。如果提供額外項目,系統將忽略初始化的引數。(I6c43b、b/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 版本包含這些修訂版本。
新功能
NavBackStackEntry
現在已與 ViewModel CreationExtras 整合,作為 生命週期2.5.0-alpha01
的一部分推出。(Ib9fe2, b/207012490)
修正錯誤
- 修正從片段的
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.2
。2.4.2版包含這些修訂版本。
修正錯誤
- 從 Navigation
2.5.0-alpha03
向後移植:NavDeepLinks
現已可正確支援嵌入路徑/深層連結 URI 中經過編碼的新行字元。(I513d1, b/217815060) - 從 Navigation
2.5.0-alpha03
向後移植:Navigation SafeArgs 現已支援使用build.gradle
中定義的命名空間來取代 AndroidManifest 中的套件。(I659ef, b/217414933) - 從 Navigation
2.5.0-alpha04
向後移植:使用命名空間且沒有AndroidManifest.xml
時Navigation Safe Args
已不會損毀。(I17ccf, b/227229815) - 從 Navigation
2.5.0-alpha04
向後移植:現在會將空白字串視為深層連結中的有效引數。(I70a0d, b/217399862)
2.4.1 版本
2.4.1 版本
2022 年 2 月 9 日
發布 androidx.navigation:navigation-*:2.4.1
。2.4.1 版隨附這些修訂版本。
修正錯誤
- 透過
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.0
。2.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
本身就是巢狀結構NavGraph
。getHierarchy()
是NavDestination
的函式,可用來驗證特定目的地是否在另一個階層中。val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
採用
BottomNavigationView
的方法NavigationUI
已更新,改為採用材質1.4.0
、NavigationBarView
中推出的父類別。因此這些方法可以與NavigationRailView
搭配使用。當透過 XML 加載
<action>
元素時,動畫屬性可以使用app:enterAnim="?attr/transitionEnter"
語法從您的主題中提取屬性。Safe Args 現在針對每個
NavArgs
類別產生fromSavedStateHandle()
方法。(#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
導航路徑及 Kotlin DSL
先前版本的導航功能會根據每個目的地有相同的整數 ID,以從其同層級目的地中辨識出該 ID,並允許直接或透過操作 navigate()
前往該目的地。這個做法仍然有效且有用,尤其當您要在 XML 中定義導航圖,且可以使用自動產生的 R.id
常數或 Safe Args(會在建構期間使用這些常數產生程式碼)時,此系統的唯一整數無法獲得語意含義和運算式,而這是透過 導航 Kotlin DSL 以程式輔助方式在執行階段建立完整動態圖形所需的條件。
這個版本推出了一個新選項,可讓您根據 路徑 在導航圖中識別目的地。路徑 是定義到達目的地的唯一不重複路徑的 String
。所有使用目的地 ID 的 Kotlin DSL 方法現已淘汰,替換為採用路徑的對等 API。
每個路徑都應視為定義該目的地 Uri
的「路徑」部分,例如 home
、profile/{userId}
、profile/{userId}/friends
等。如果目的地識別資訊與特定內容相關聯,這些動態引數應屬於路徑的一部分,遵守與 默示深層連結 相同的規則。
原本只使用 ID 的 NavController
API 現在都有使用路徑 String
的超載。這包括 navigate()
、popBackStack()
、popUpTo()
及 getBackStackEntry()
。
這會對 API 造成一些影響:
- Kotlin DSL 上的
popUpTo
Kotlin 屬性已淘汰,請改用popUpToId
。 getStartDestination()
API 已淘汰,並改用getStartDestinationId()
。
與以 ID 進行導航不同,依路線導航時會採用與隱式深層連結,您可以直接前往任何巢狀結構圖中的任一目的地,確認這些路徑可用於多模組專案,而不要為每個目的地新增外部可見的深層連結。
導航 Compose
navigation-compose
成果可提供 導航元件 和 Jetpack Compose 之間的整合。它使用 @Composable
函式做為應用程式的目的地。
此版本提供以下功能:
- 一種
NavHost
組合元件,可讓您使用composable
和dialog
目的地透過 Kotlin DSL 建立導航圖,並支援 Accompanist 導航材質 等選用導航器。 - 須在目的地之間支援交集。Acomcomistist 導航動畫 可用來針對實驗的 Compose API 控制輸入和結束轉場效果。
- 將
Lifecycle
的範圍轉換成各個可組合的目的地。當任何進入轉場結束時,隨即立即下降到STARTED
,以及當任何結束轉場開始時,每個目的地只能到達RESUMED
狀態,這樣就能避免IllegalStateException
和多點觸控問題,只需在Lifecycle
未RESUMED
時觸發navigate
。 - 在目的地層級設定
ViewModel
(透過 生命週期 ViewModel Compose2.4.0
的viewModel()
API 或Hilt 導航撰寫1.0.0
的hiltViewModel()
的範圍,提供能滿足設定變更且位於返回堆疊的範圍(當處置可組合內容時)以及 ViewModel 中的訊號onCleared()
表示永久拋棄及NavBackStackEntry
的相關狀態被清除。 - 在目的地層級設定
rememberSaveable
狀態的範圍,確保所有可組合的狀態會在您返回目的地時自動儲存並還原。 - 完整支援在處理結束並重新建立之後,儲存和還原
NavController
的狀態,及其目的地狀態。 - 自動與系統返回按鈕整合。
支援傳遞引數、將深層連結附加至目的地,以及將結果傳回先前的目的地。
在
rememberNavController()
和currentBackStackEntryAsState()
中編寫特定輔助程式,以允許 提升狀態,並將NavController
與NavHost
之外的可組合元件(例如底部導航列)建立連結。
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
詳情請參閱 Compose 導航指南。
多個返回堆疊
NavController 負責管理目的地的返回堆疊,因此當您 navigate()
至其堆疊位置時在返回堆疊中新增目的地,而在呼叫 popBackStack()
或觸發系統後,就會移除這些目的地。現有 NavOptions
類別和在導航圖 XML 中整合至 <action>
元素,已擴大至支援儲存和還原返回堆疊。
作為本次異動的一部分,onNavDestinationSelected()
、BottomNavigationView.setupWithNavController()
和 NavigationView.setupWithNavController()
的 NavigationUI
方法現在會自動儲存並還原彈出目的地的狀態,因此無需任何程式碼變更即可支援多個返回堆疊。將「片段」與「導航」搭配使用時,這是與多個返回堆疊整合的首選方式。
儲存和還原狀態的基礎 API 會透過數種途徑呈現:
在導航 XML 中,
<action>
元素現在可以使用app:popUpToSaveState
和app:restoreState
的布林值屬性,儲存透過app:popUpTo
彈出的任何目的地狀態,並還原作為app:destination
傳遞的目的地相關的狀態:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
在
navOptions
Kotlin DSL 中,您可以在popUpTo
建構工具 中加入restoreState
布林值屬性和saveState
布林值屬性:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
如要透過
NavOptions.Builder
手動構建NavOptions
物件,可以使用setRestoreState()
和新的超載setPopUpTo()
,以取得額外的saveState
參數。NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
向
popBackStack()
發出的程式輔助呼叫現可加入額外的saveState
參數。您可以使用
clearBackStack()
方法清除透過popBackStack()
或popUpToSaveState
儲存的任何狀態。
在所有情況下,NavController
會儲存及還原每個 NavBackStackEntry
的狀態,包括位於任何導航目的地的 ViewModel
執行個體。更新 Navigator
API 可讓每個 Navigator
支援儲存及還原其自己的狀態。
行為變更
NavDeepLinkBuilder
現在會將PendingIntent.FLAG_IMMUTABLE
加入createPendingIntent()
傳回的PendingIntent
,確保這個 API 在指定 Android 12 時能夠正常運作。- 導航現在取決於生命週期
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
剖析的引數現在會將井字號以同樣方式視為問號,作為引數之間的一個分隔符。(I21309、b/180042703)
修正錯誤
- 深層連結不再忽略含有與預留位置名稱相同的值引數。(If8017、b/207389470)
- 還原
NavController
後,NavController
不會在透過轉場效果彈出巢狀結構目的地時當機。(I0f7c9、b/205021623) - 從現在起,如果使用無效的
startDestination
,系統會顯示錯誤訊息做為起始目的地的路徑(如有)。(I86b9d、b/208041894)
導航 Compose 修正錯誤
- 修正問題:使用底部導航選單項目在起始目的地和其他目的地之間快速切換時可能會導致當機。(Ic8976、b/208887901)
- 設定變更或處理結束後,對話方塊目的地就會立即在螢幕頂端復原。(I4c0dc、b/207386169)
- 修正問題:在對話方塊關閉時嘗試從對話方塊
NavBackStackEntry
擷取ViewModel
的問題。(I6b96d、b/206465487) - 修正問題:如果將
activity
目的地與導航 Compose 的NavHost
搭配使用,會導致無限制重新組合。(I8f64c) - 修正導航 Compose 中的外洩問題:在設定變更或處理結束後,會保留於舊活動的參考中。(I4efcb、b/204905432)
Safe Args 錯誤修正
- 處理程序結束後,嘗試復原自訂可封裝陣列時,
SafeArgs
不會再當機。(I618e8、b/207315994) - 已修正 safe args 中的錯誤,即不允許布林值有
null
值。(I8c396、b/174787525)
版本 2.4.0-beta02
2021 年 11 月 3 日
發佈 androidx.navigation:navigation-*:2.4.0-beta02
。2.4.0-beta02 版本包含這些修訂版本。
API 異動
- 系統處理明確與隱含深層連結時,現在會在前往其他圖形時自動新增
saveState
旗標,以確保程式碼(例如NavigationUI.setupWithNavController
和採用多個返回堆疊的程式碼)正常運作。(Ic8807)
行為變更
- 深層連結模式現已在 NavDeepLink 中延遲編譯,而非在加載期間。這樣可以改善含有深層連結的導航圖的加載時間。(b8d257、b/184149935)
修正錯誤
- 修正問題:當
NavHost
直接加入活動的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-beta01
。2.4.0-beta01版本包含這些修訂版本。
新功能
- 您現在可以將
by navGraphViewModel
與路徑搭配使用,作為使用 ID 的替代方案,以便透過導航 Kotlin DSL 為片段提供更好的支援。(I901e3、b/201446416)
API 異動
visibleEntries
API 目前處於實驗階段。(I93f6f)
修正錯誤
- 當在相同螢幕 (Id52d8、b/200817333) 之間來回切換從而中斷了轉換時,ViewModel 不會再被毀。
- 當在
NavDestination
中加入深層連結時,可空值NavDeepLink
引數不再需要預設值。(I5aad4、b/201320030) - 現在使用不同生命週期的 NavBackStackEntries 已不再被視為等化。這表示當使用者使用 SingleTop 進行導航時,或重新選取底部選單項目時,NavHost 會正確地重新編排所有目的地。(I1b351、b/196997433)
- 修正
AbstractListDetailFragment
的問題:導致onCreateListPaneView()
傳回的清單窗格中的layout_width
和layout_weight
屬性被錯誤處理或遭到忽略。(f5fbf3) - 對話方塊目的地的視覺化狀態現已與
DialogFragmentNavigator
的狀態正確保持同步。也就是說,手動呼叫DialogFragment
的非同步dismiss()
API,會正確清除目前已關閉對話方塊的所有對話方塊。這並不會影響您使用popUpTo
或popBackStack()
關閉對話方塊的情況。(I77ba2) AbstractAppBarOnDestinationChangedListener
現在向onDestinationChanged()
提供更清楚的錯誤訊息。(Ie742d)
版本 2.4.0-alpha10
2021 年 9 月 29 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha10
。2.4.0-alpha10 版本包含這些修訂版本。
新功能
- NavController 現在提供透過
visibleEntries
StateFlow (Ia964e) 擷取所有可見NavBackStackEntry
執行個體清單的功能 rememberNavController()
現在會使用選用的Navigator
執行個體組合,系統會將其加入傳回的NavController
,以便更好地支援選用的導航程式,例如來自 Accompanist 導航材質 的導航程式。(I4619e)
修正錯誤
- 重新建立活動後,動態導航就不會再發生當機。(Ifa6a3、b/197942869)
- 修正系統返回按鈕的問題,即只有在返回包含
NavHost
的可組合目的地後,才會發生此問題。(3ed148、b/195668143) - SafeArgs 現在會以適當的參數順序產生
fromBundle()
和fromSavedStateHandle()
的引數。(I824a8、b/200059831)
版本 2.4.0-alpha09
2021 年 9 月 15 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha09
。2.4.0-alpha09 版本包含這些修訂版本。
新功能
- 您現在可以使用
clearBackStack()
方法,清除透過popBackStack()
或popUpToSaveState
儲存的任何狀態。(I80a0f) - 您現在可以傳遞引數及/或深層連結清單至巢狀結構導航圖的建構工具,它們將會自動加入所產生的圖形。(I8a470、b/182545357)
API 異動
navArgument
Kotlin DSL 函式現在位於navigation-common
中,而非navigation-compose
。這需要更新匯入才能繼續使用此函式。(I1d095)
行為變更
- 在產生引數時,Safe Args 現在會優先顯示不含預設值的參數。(I89709、b/198493585)
修正錯誤
- 使用導航 Compose 時,只有在其所有子項為
DESTROYED
時,NavGraphs 才會是DESTROYED
。(I86552、b/198741720) - 空值
NavDeepLink
引數不再需要使用預設值。(Ia14ef、b/198689811) - 使用新圖形呼叫
setGraph()
時,也將一併清除所有已儲存的返回堆疊,以及先前彈出返回堆疊的行為。(I97f96) - 修正問題:
OnDestinationChangedListener
執行個體和currentBackStackEntryFlow
在使用launchSingleTop
時不會收到通知。(Iaaebc)
依附元件更新
- 導航 Compose 現在取決於活動 Compose 1.3.1。(I05829)
- 導航 Compose 現在取決於 生命週期 ViewModel Compose
2.4.0-beta01
。(Ib86a3)
版本 2.4.0-alpha08
2021 年 9 月 1 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha08
。2.4.0-alpha08 版本包含這些修訂版本。
新功能
- 現在可以擴充
NavType
類別,以便建立自訂 NavTypes。只有在使用程式輔助下(例如透過導航圖 Kotlin DSL)建構導航圖時才支援自訂類型。(I78440、b/196871885)
行為變更
- 在產生操作時,Safe Args 產生的 Kotlin 程式碼現在會優先使用不含預設值的引數,並將預設值設為參數。(Idb697、b/188855904)
- 深層連結現在會驗證
Uri
中是否包含所有必要的引數(不含預設值)。(#204、b/185527157)
修正錯誤
- 使用
getBackStackEntry
和previousBackStackEntry
在 composable() 中同時使用remember()
時,也不會導致例外狀況,即返回堆疊中沒有目的地。(I75138、b/194313238) - 現在當變更返回堆疊引數並使用
launchSingleTop=true
時,導航 Compose 現在可以正確重新組合。(Iebd69、b/186392337) - 使用內含 13 或 29 個目的地的圖形呼叫
setGraph
時,將不再有ArrayIndexOutOfBoundsException
。(I1a9f1、b/195171984) - SafeArgs Java 產生器不應在產生 Args 類別時產生 Lint 警告。(I1a666、b/185843837)
外部貢獻
- 感謝你使用 ospixd 確保深層連結確認所有必要引數(未包含預設值)均列於
Uri
中。(#204、b/185527157)
版本 2.4.0-alpha07
2021 年 8 月 18 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha07
。2.4.0-alpha07 版本包含這些修訂版本。
修正錯誤
- 現在使用多個返回堆疊功能時,設定變更之後,以及變更圖形時,導航 Compose 可正確儲存狀態。(If5a3d, b/195141957)
- 使用具備多個返回堆疊的導航 compose 功能時,重新選取同一個分頁後,系統不會顯示空白螢幕。(I860dc, b/194925622)
NavHost
現在會觀察NavBackStackEntry
的Lifecycle.State
發生的變更,也就是說,現在在片段中使用NavHost
,應被改寫為生命週期變更,而不會導致空白螢幕。(I4eb85、b/195864489)- 修訂問題:重新建立活動之後,關閉
DialogFragment
不會正確更新NavController
狀態(例如在設定變更之後)。(Icd72b) - 修正填入對話方塊目的地時不會更新 NavController 的系統返回按鈕處理作業的問題,可能導致 NavController 攔截返回按鈕,即使沒有任何返回堆疊可以彈出。(If3b34)
- Safe-args 現在會自動產生可用於測試
ViewModel
程式碼的引數toSavedStateHandle
方法。(If1e2d、b/193353880)
版本 2.4.0-alpha06
2021 年 8 月 4 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha06
。2.4.0-alpha06 版本包含這些修訂版本。
API 異動
AbstractListDetailFragment
中的requireSlidingPaneLayout()
和requireDetailPaneNavHostFragment()
方法已分別重新命名為getSlidingPaneLayout()
和getDetailPaneNavHostFragment()
。(I34a08)
行為變更
- 使用動畫(例如
Crossfade
)導航時,新目的地的Lifecycle
只會在動畫完成時到達RESUMED
。(If0543、b/172112072、b/194301889) - 導航 Compose 的
NavHost
現在會將圖形設為第一個組合的一部分。(Ieb7be)
修正錯誤
- 彈出導航圖的最後一個目的地後,不會再擲回
ClassCastException
。(If0543、b/172112072、b/194301889) - 修正問題:當新增不含
Uri
的深層連結及透過路徑或深層連結進行導航時會發生NullPointerException
。(938a0c、b/193805425) - 修正導航 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 版本包含這些修訂版本。
行為變更
- 導航 Compose 的
NavHost
現在會在導航目的地時一律使用交叉漸層。(I07049、b/172112072) - 您現在可以變更 NavHost 圖形。系統會將圖形中具有相同 StartDestination 和目的地的圖形視為等化,且不會清除
NavController
返回堆疊。(I0b8db、b/175392262)
修正錯誤
- 修正
NoSuchElementException
問題,當從附加至NavBackStackEntry
的LifecycleObserver
中呼叫popBackStack()
時,由於再進入更新為 NavController 的狀態而導致出現問題。(I64621) AbstractListDetailFragment
現已允許SlidingPaneLayout
不使用AbstractListDetailFragment
時,也會完全從 APK 中移除。(I611ad)NavGraph
和NavDestination
現已覆寫等式方法,因此系統會將兩個值相同的物件視為相同。(I166eb、b/175392262)
版本 2.4.0-alpha04
2021 年 7 月 1 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha04
。2.4.0-alpha04 版本包含這些修訂版本。
新功能
navigation-fragment
成果現在包含透過新版AbstractListDetailFragment
的 兩個窗格版面配置 的預建構實作。此片段使用SlidingPaneLayout
來管理清單窗格(也就是子類別提供的清單)及詳細資料窗格,其使用NavHostFragment
做為實作,如 實作範例 中所述。(Iac4be, b/191276636)navigation-compose
成果的NavHost
現在支援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()。(Ie89fc、b/172112072)- 自訂
Navigator
執行個體現在可以透過NavigatorState
上的pushWithTransaction
和popWithTransition
API,以非同步的方式推送或填入目的地。請注意,任何隨附的導航器尚未使用這個 API。(Ic4d7c、b/172112072)
行為變更
NavDeepLinkBuilder
現在會將PendingIntent.FLAG_IMMUTABLE
加入createPendingIntent()
傳回的PendingIntent
,確保這個 API 在指定 Android 12 時能夠正常運作。(If8c52)
修正錯誤
- 修正
<include-dynamic>
的問題,傳送至圖形的引數無法正確傳送至動態納入圖形。(I3e115) - 修正
NullPointerException
當使用string[]
引數(含有預設值@null
)導航至目的地時出現的問題(I1fbe8) - 為
@Navigator.Name
新增 ProGuard 規則,修正使用 R8 3.1 完整模式時遇到的問題。(I2add9、b/191654433) - 在
1.5.0
之前,使用Kotlin
版本建構應用程式時,SafeArgs 將不再失敗。(Icd1ff, b/190739257)
版本 2.4.0-alpha03
2021 年 6 月 6 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha03
。2.4.0-alpha03 版本包含這些修訂版本。
修正錯誤
- 修正問題:需要兩次
navigate()
呼叫才能前往隨附的動態圖表。(I7785c、b/188859835) - 修正導航
2.4.0-alpha01
中的迴歸問題,當位於頂層目的地時,setupActionBarWithNavController()
不會正確移動 Up 圖示。(I5d443、b/189868637) - 修正先前在 NavController 的根圖形中呼叫
popBackStack()
後出現IllegalStateException
的問題。(I2a330、b/190265699) - 使用
navigation-common
或需要依賴的所有成果時,by navArgs()
的 ProGuard 規則現已正確套用。(I68800、b/190082521) OnDestinationChangedListener
首次呼叫navigate()
時,首次獲得回呼,現在獲得第二個回呼,並導航至目的地。(Ie5f9e、b/190228815)- Safe Args 在搭配動態功能模組和 AGP 7.0 以上版本使用時,不會再當機。(I69518、b/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-alpha02
。2.4.0-alpha02 版本包含這些修訂版本。
新功能
- 路徑現在支援活動、片段和對話方塊位置,以及 DynamicDynamic Kotlin DSL 的路徑。(Ib5544、Ia617b、I22f96、b/188914648、b/188901565)
NavigationUI
暫時新增實驗性 API,可讓您選擇不儲存狀態。儘管一律儲存狀態是正確的行為,但仍保留已淘汰的程式庫(即保留的片段),但儲存狀態時不支援,因此應用程式會暫時將不支援的 API 轉換下來。(Idf93c)導航現在提供
findDestination()
和getHierarchy()
API,可用來實作自訂 NavigationUI。findDestination()
是NavGraph
的擴充功能,可在圖中尋找目的地。getHierarchy()
是NavDestination
的函式,可用來驗證特定目的地是否位於其他階層 (I2932f、b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
更新
BottomNavigationView
的 NavigationUI 方法改為採用 Material1.4.0
(NavigationBarView
) 中引入的超類別。這樣即可將這些方法與NavigationRailView
搭配使用。(Ib0b36、b/182938895)透過 XML 加載
<action>
元素時,動畫屬性可以使用app:enterAnim="?attr/transitionEnter"
語法從您的主題中提取屬性。(I07bc1、b/178291654)
API 異動
- 使用 ID 的 Kotlin DSL 建構工具已淘汰,改為使用路徑的建構工具 (I85b42、b/188816479) (I9f58f、b/188816479)
修正錯誤
DialogFragmentNavigator
現在使用NavigatorState.pop()
API 來通知NavController
在對話方塊被關閉或按下按鈕外的對話方塊關閉時,NavController
狀態一律會與 Navigator 的狀態保持同步。(I2ead9)使用
onDestinationChanged
回呼操縱OnDestinationChangedListeners
的清單時,導航不會再提供ConcurrentModificationException
。(Ib1707、b/188860458)嘗試在 Kotlin 中產生方向屬性時,Safe Args 不再當機。(Id2416、b/188564435)
NavDestination 上的 setId 方法現已與
@IdRes
正確註解,因此只接受資源 ID。(I69b80)findNode
的 int 參數現在是resId
而不是resid
。(I7711d)
依附元件更新
- Safe-Args 目前取決於 Android Gradle 外掛程式 4.2.0。也就是說,您將不會再收到
applicationIdTextResource
警告。(I6d67b、b/172824579)
版本 2.4.0-alpha01
2021 年 5 月 18 日
發佈 androidx.navigation:navigation-*:2.4.0-alpha01
。2.4.0-alpha01 版本包含這些修訂版本。
新功能
NavController
上的currentBackStackEntryAsFlow()
方法提供的Flow
會在目前的NavBackStackEntry
改變時出現。 您可以把此流程做為手動管理OnDestinationChangedListener
的替代選項。(I19c4a, #89, b/163947280)
多個返回堆疊
NavController 負責管理目的地的返回堆疊,因此當您 navigate()
至其堆疊位置時在返回堆疊中新增目的地,而在呼叫 popBackStack()
或觸發系統後,就會移除這些目的地。現有 NavOptions
類別和在導航圖 XML 中整合至 <action>
條目,已擴大至支援儲存和還原返回堆疊。(b/80029773)
作為本次異動的一部分,onNavDestinationSelected()
、BottomNavigationView.setupWithNavController()
和 NavigationView.setupWithNavController()
的 NavigationUI
方法現在會自動儲存並還原彈出目的地的狀態,因此無需任何程式碼變更即可支援多個返回堆疊。將「片段」與「導航」搭配使用時,這是與多個返回堆疊整合的首選方式。(Ie07ca)
儲存和還原狀態的基礎 API 會透過數種途徑呈現:
在導航 XML 中,
<action>
元素現在可以使用app:popUpToSaveState
和app:restoreState
的布林值屬性,儲存透過app:popUpTo
彈出的任何目的地狀態,並還原作為app:destination
傳遞的目的地相關的狀態:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
在
navOptions
Kotlin DSL 中,您可以在popUpTo
建構工具 中加入restoreState
布林值屬性和saveState
布林值屬性:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
如要透過
NavOptions.Builder
手動構建NavOptions
物件,可以使用setRestoreState()
和新的超載setPopUpTo()
,以取得額外的saveState
參數。NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
向
popBackStack()
發出的程式輔助呼叫現可加入額外的saveState
參數。
在所有情況下,NavController
會儲存及還原每個 NavBackStackEntry
的狀態,包括位於任何導航目的地的 ViewModel
執行個體。更新 Navigator
API 可讓每個 Navigator
支援儲存及還原其自己的狀態。
導航 Compose 中用於 composable
目的地的 ComposeNavigator
和用於導航的 <fragment>
目的地中的 FragmentNavigator
和 DynamicFragmentNavigator
已更新為使用新的 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
新增出廠函式 (Icd515、b/175222619) NavBackStackEntry
的專屬 ID 現已計入其公開 API 的一部分。(Ie033a)NamedNavArgument
的name
和argument
欄位以及銷毀函式現已公開。(#174, b/181320559)- 隆重推出全新的
NavBackStackEntry#provideToCompositionLocals
擴充功能,為相關的組合提供NavBackStackEntry
。(#175, b/187229439)
Safe Args
Safe Args 現在針對每個
NavArgs
類別產生fromSavedStateHandle()
方法。(#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
更新 Safe Args 取決於 KotlinPoet
1.8.0
。(#172, b/183990444)
行為變更
- 導航現在取決於生命週期
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
只與 Compose1.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,讓
name
和argument
欄位解構為公開NamedNavArgument
的函式。(#174, b/181320559) - 藉助jossiwolf推出新的
NavBackStackEntry#provideToCompositionLocals
擴充功能,為相關組合變數提供NavBackStackEntry
。(#175, b/187229439) - 藉助 jossiwolf 提升
NavigatorProvider#addNavigator
的行為,確保同樣的執行個體重複呼叫不會造成問題。(#176, b/187443146)
導航 Compose 版本 1.0.0
版本 1.0.0-alpha10
2021 年 4 月 7 日
androidx.navigation:navigation-compose:1.0.0-alpha10
發佈。1.0.0-alpha10 版本包含這些修訂版本。
API 異動
NavHost
現在接受Modifier
,會傳遞至會包含目的地組合的可組合容器。(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-alpha08
。1.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-alpha07
。1.0.0-alpha07 版本包含這些修訂版本。
依附元件更新
- 導航 Compose 現在取決於 Lifecycle ViewModel Compose 1.0.0-alpha01,可為
composable
目的地提供viewModel()
支援。(I7a374) NavHost
現在會使用 Activity-Compose 1.3.0-alpha01 的全新LocalOnBackPressedDispatcherOwner
以在NavController
上取得設定的OnBackPressedDispatcher
。(I65b12)
版本 1.0.0-alpha06
2021 年 1 月 28 日
發布 androidx.navigation:navigation-compose:1.0.0-alpha06
。1.0.0-alpha06 版本包含這些修訂版本。
API 異動
- 在
NavController
上新增getBackStackEntry(route: String)
擴充功能方法,以傳回相關聯的NavBackStackEntry
。(If8931)
版本 1.0.0-alpha05
2021 年 1 月 13 日
發布 androidx.navigation:navigation-compose:1.0.0-alpha05
。1.0.0-alpha05 版本包含這些修訂版本。
更新以依附 Compose 1.0.0-alpha10。
1.0.0-alpha04 版本
2020 年 12 月 16 日
發布 androidx.navigation:navigation-compose:1.0.0-alpha04
。1.0.0-alpha04 版本包含這些修訂版本。
- 已更新與 Compose
1.0.0-alpha09
的相容性。
版本 1.0.0-alpha03
2020 年 12 月 2 日
發布 androidx.navigation:navigation-compose:1.0.0-alpha03
。1.0.0-alpha03 版本包含這些修訂版本。
修正錯誤
- 修正了
popBackStack()
和navigateUp()
在設定變更或處理程序結束及重新建立之後無法運作的問題。(Icea47, b/173281473) - 導航到 NavHost 中的巢狀結構圖現在已可正常運作。(I0948d, b/173647694)
版本 1.0.0-alpha02
2020 年 11 月 11 日
發布 androidx.navigation:navigation-compose:1.0.0-alpha02
。1.0.0-alpha02 版本包含這些修訂版本。
API 異動
- 導航 compose 現在支援使用 POPUpTo 以及 launchSingleTop 作業 (If96c3、b/171468994)
- 新增導航功能,其採用路徑而非 ID,可以在導航 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
成果可提供 導航元件 和 Jetpack Compose 之間的整合。它使用 @Composable
函式做為應用程式的目的地。
初始版本提供以下功能:
NavHost
可組合元件,可讓您透過 Kotlin DSL 建構導航圖。- 設定生命週期、
ViewModel
以及已記錄的狀態儲存於目的地層級的範圍。 - 自動與系統返回按鈕整合。
- 支援傳遞引數、將深層連結附加至目的地,以及將結果傳回先前的目的地。
- 在
rememberNavController()
和currentBackStackEntryAsState()
中編寫特定輔助程式,以允許 提升狀態,並將NavController
與NavHost
之外的可組合元件(例如底部導航列)建立連結。
詳情請參閱 Compose 導航指南。
版本 2.3.5
版本 2.3.5
2021 年 4 月 7 日
androidx.navigation:navigation-*:2.3.5
發佈。2.3.5 版包含這些修訂版本。
新功能
- 現在使用
NavDeepLinkRequest
或Uri
導航,就可以在結果目的地中存取Uri
、操作及 MIME 類型,方法是經由KEY_DEEP_LINK_INTENT
從引數中獲取意圖,為適用於外部深層連結的函式建立鏡射。(I975c3, b/181521877)
修正錯誤
OnBackPressedCallbacks
已新增至含有NavBackStackEntry
的發送器,因為 LifecycleOwner 會在活動生命週期為STOPPED
,以及STARTED
之後正確攔截 (Iff94f、b/182284739 )- 深層連結網域剖析現在不區分大小寫,確保
www.example.com
與www.example.com
和www.Example.com
相符。請注意,查詢參數名稱有大小寫之分。(#144, b/153829033) - 修正問題:當目的地有多個不可空值的預設引數時,只覆寫該引數的子集而導航至該目的地時,就會發生
NullPointerException
。(aosp/1644827)
依附元件更新
- 導航 Safe Args Gradle 外掛程式現在取決於 Kotlin Gradle Plugin 1.4.31。(aosp/1661058, b/181156413)
外部貢獻
- 藉助
bentrengrove
發出提取要求,使得深層連結在網域剖析時不區分大小寫。(#144, b/153829033)
版本 2.3.4
版本 2.3.4
2021 年 3 月 10 日
androidx.navigation:navigation-*:2.3.4
發佈。2.3.4 版包含這些修訂版本。
新功能
- 作為深層連結 URI 的一部分傳送時,現在可以正確剖析
ReferenceType
引數。這同時支援原始整數值以及0x
開頭的十六進位值。(#127, b/179166693) - 包含
app:argType="float"
的引數的android:defaultValue
現已支援整數預設值,因此您可以使用android:defaultValue="0"
,不需要使用0.0
。(#117, b/173766247)
修正錯誤
- 修正了使用導航支援動態功能時,會阻礙安裝進度的問題。(Ib27a7, b/169636207)
- 使用已經設定的相同物件呼叫
setViewModelStore
或setLifecycleOwner
時,無法執行任何操作 (Idf491、b/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 的根層級檢視畫面。這樣,您可以透過FragmentScenario
和Navigation.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-runtime
和navigation-dynamic-features-fragment
成果可讓您前往功能模組中定義的目的地,並視需要自動處理功能模組的安裝作業。詳情請參閱使用功能模組導航。 - 導航測試:
navigation-testing
成果會提供TestNavHostController
來讓您設定目前的目的地,並在導航作業完成之後驗證返回堆疊。詳情請參閱測試導航一節。 - 傳回結果:現在與導航返回堆疊中的每一個目的地相關的
NavBackStackEntry
,都可用於存取適合儲存少量儲存狀態的SavedStateHandle
,其應該與特殊返回堆疊條目有關。詳情請參閱將結果傳回先前的目的地一文。 NavigationUI
支援Openable
:位於NavigationUI
中的所有DrawerLayout
用量已替換為更多一般化Openable
介面,其新增於 CustomView1.1.0
中,由位於導航匣版面配置1.1.0
中的DrawerLayout
實作。- 深層連結中的操作和 MIME 類型支援:除了原本可用的
app:uri
之外,深層連結也已支援app:action
和app:mimeType
。NavController
現在支援透過新的NavDeepLinkRequest
類別使用任何欄位組合進行導航。詳情請參閱使用 NavDeepLinkRequest 導航。
已知問題
- 資訊清單合併尚不支援深層連結操作及 MIME 類型。在此之前,資訊清單中
<nav-graph>
元素產生的任何<intent-filter>
元素都不會在其<data>
元素或您的自訂<action>
中加入 MIME 類型。必須在資訊清單中手動新增適當的<intent-filter>
。
版本 2.3.0-rc01
2020 年 6 月 10 日
androidx.navigation:navigation-*:2.3.0-rc01
發佈。版本 2.3.0-rc01 包含這些修訂版本。
修正錯誤
- 修正
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 包含這些修訂版本。
修正錯誤
- 修正了
NavBackStackEntry
的Lifecycle
在程序結束之後無法準確更新的問題。(b/155218371) OnDestinationChangedListener
呼叫setGraph()
前已註冊的執行個體現在可以在程序完成後,正確傳送還原的目的地。(b/155218371)- 使用
singleTop
時,NavBackStackEntry
已正確更新引數,並將更新後的引數傳送至所有OnDestinationChangeListener
執行個體。(b/156545508)
依附元件更新
NavigationUI
成果現在取決於 CustomView1.1.0-rc01
和 DrawerLayout1.1.0-rc01
。(aosp/1309696)
版本 2.3.0-alpha06
2020 年 4 月 29 日
androidx.navigation:navigation-*:2.3.0-alpha06
發佈。(2.3.0-alpha06 版本包含這些修訂版本)。
新功能
- 除了原本可用的
app:uri
之外,深層連結也已進一步支援app:action
和app:mimeType
。NavController 現在支援透過新的NavDeepLinkRequest
類別,使用任意欄位組合進行導航。(b/136573074, b/135334841)
API 異動
- 大幅提升 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)
依附元件更新
- 導航現取決於 片段
1.2.4
。(aosp/1277325) - 動態導航現在取決於 Play Core
1.7.2
。(aosp/1282257)
2.3.0-alpha04 版本
2020 年 3 月 18 日
androidx.navigation:navigation-*:2.3.0-alpha04
發佈。2.3.0-alpha04 版本包含這些修訂版本。
新功能
- 現已支援功能模組活動,以及導航 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 異動
- 現在,
AppBarConfiguration
使用 CustomView1.1.0-alpha02
(其中DrawerLayout
實作為 DrawerLayout1.1.0-alpha04
)中引入的Openable
介面以透過NavigationUI
自訂Openable
實作,從而取代依賴具體的DrawerLayout
類別。(b/129030452)
修正錯誤
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)
依附元件變更
- 導航現在取決於核心
1.2.0
。
版本 2.3.0-alpha01
2020 年 2 月 5 日
androidx.navigation:navigation-*:2.3.0-alpha01
發佈。2.3.0-alpha01 版本包含這些修訂版本。
新功能
- 新的
navigation-testing
成果會提供TestNavHostController
類別。這個類別提供另一種使用模擬NavController
的替代選項,當測試導航可讓您設定目前目的地,並在導航作業完成後驗證返回堆疊。(b/140884273) - 全新的
navigation-dynamic-features-fragment
(及其轉換依附元件,navigation-dynamic-features-runtime
)允許加入目的地或整個導航圖(透過<include-dynamic>
)從功能模組,在導航至目的地時讓使用者能夠依需求無縫安裝隨選功能模組。詳情請參閱使用功能模組導航。(b/132170186)
修正錯誤
- 從導航
2.2.1
起:不含查詢參數的深層連結現在可正確忽略任何查詢參數,而不會將其附加在{argument}
元素後方或與深層連結不符。(b/147447512) - 從導航
2.2.1
起:DrawerArrowDrawable
的navigation-ui
ProGuard 規則已更新,確保不需要使用android.enableJetifier=true
。(b/147610424) - 從導航
2.2.1
起:navigation-common-ktx
模組現在擁有專屬的資訊清單套件名稱,不再和navigation-runtime-ktx
共用相同的資訊清單套件名稱。(aosp/1141947)
依附元件更新
- 從導航
2.2.1
起:導航2.2.1
將取決於 生命週期 ViewModel SavedState2.2.0
和 片段1.2.1
。
2.2.2 版本
2.2.2 版本
2020 年 4 月 15 日
發佈 androidx.navigation:navigation-*:2.2.2
。2.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
依附元件更新
- 導航現取決於 片段
1.2.4
。(aosp/1277325)
版本 2.2.1
版本 2.2.1
2020 年 2 月 5 日
發佈 androidx.navigation:navigation-*:2.2.1
。2.2.1 版包含這些修訂版本。
修正錯誤
- 不含查詢參數的深層連結現在可正確忽略任何查詢參數,而不會將其附加在
{argument}
元素後方或與深層連結不符。(b/147447512) - 已更新
DrawerArrowDrawable
的navigation-ui
ProGuard 規則,確保不需要android.enableJetifier=true
。(b/147610424) navigation-common-ktx
模組現已擁有專屬的資訊清單套件名稱,而不是與navigation-runtime-ktx
相同的資訊清單套件名稱。(aosp/1141947)
依附元件更新
- 導航
2.2.1
現在會根據生命週期ViewModel SavedState2.2.0
及 片段1.2.1
而定。
2.2.0 版本
2.2.0 版本
2020 年 1 月 22 日
發佈 androidx.navigation:navigation-*:2.2.0
。2.2.0 版含有這些修訂版本。
2.1.0 版之後的重要異動
- NavBackStackEntry:您現在可以呼叫
NavController.getBackStackEntry()
,在返回堆疊上傳送目的地 ID 或導航圖 ID。傳回的NavBackStackEntry
會提供導航驅動的LifecycleOwner
、ViewModelStoreOwner
(與NavController.getViewModelStoreOwner()
傳回的相同)及SavedStateRegistryOwner
,此外還提供用來啟動該目的地的引數。 - 生命週期 ViewModel SavedState 整合:
SavedStateViewModelFactory
已經使用並預設使用by navGraphViewModels()
或ViewModelProvider
搭配ViewModelStoreOwner
退貨人:NavController.getBackStackEntry()
或NavController.getViewModelStoreOwner()
的 Google Ads 新帳戶重新申請驗證。 - 深層連結的查詢參數支援:現在起,包含查詢參數的深層連結現在支援重新排序的查詢參數;具有預設值或可為空值的引數現在能用於比對深層連結。
- 完善動畫支援功能:
NavHostFragment
現在使用 Fragment 1.2.0 版FragmentContainerView
,修正了動畫 Z 排序問題以及將視窗插邊分到片段的問題。
2.2.0-rc04 版本
2019 年 12 月 18 日
發佈 androidx.navigation:navigation-*:2.2.0-rc04
。2.2.0-rc04 版包含這些修訂版本。
修正錯誤
- 已調整
navigation-ui
所使用的預設淡出動畫效果,以符合片段1.2.0-rc04
中調整後的淡出動畫。(b/145769814)
版本 2.2.0-rc03
2019 年 12 月 4 日
發佈 androidx.navigation:navigation-*:2.2.0-rc03
。2.2.0-rc03 版本包含這些修訂版本。
修正錯誤
- 修正深層連結剖析問題:以往使用查詢參數和引數做為路徑的最後一部分時,系統會自動剖析最終路徑引數的多個半型字元。(b/144554689)
- 修正深層連結剖析問題,選用參數會接收
"@null"
,而不是null
。(b/141613546) NavHostFragment
現在搭配FragmentContainerView
變更設定後,可正確還原圖形。(b/143752103)
依附元件變更
- 導航目前取決於生命週期
2.2.0-rc03
、ViewModel SavedState1.0.0-rc03
、活動1.1.0-rc03
以及片段1.2.0-rc03
(如適用)。
版本 2.2.0-rc02
2019 年 11 月 7 日
發佈 androidx.navigation:navigation-*:2.2.0-rc02
。2.2.0-rc02 版本包含這些修訂版本。
依附元件變更
- 導航功能現在取決於 androidx.lifecycle
2.2.0-rc02
。
2.2.0-rc01 版本
2019 年 10 月 23 日
androidx.navigation:navigation-*:2.2.0-rc01
發布,且自 2.2.0-beta01
起沒有變更。2.2.0-rc01 版包含這些修訂版本。
版本 2.2.0-beta01
2019 年 10 月 9 日
發佈 androidx.navigation:navigation-*:2.2.0-beta01
。2.2.0-beta01 版本包含這些修訂版本。
新功能
NavDestination
及其子類別現在會覆寫toString()
,以便在偵錯時提供更多實用資訊。(b/141264986)
行為變更
- 現在比對深層連結時忽略額外的查詢參數,而不會導致比對失敗。(b/141482822)
修正錯誤
- 修正問題:以往如果指定了查詢參數,系統也會忽略深層連結路徑中的引數。(b/141505755)
- 在
Activity
上,navArgs()
Kotlin 擴充功能在沒有額外附加內容時,提供更完整的錯誤訊息。(b/141408999) - Safe Args 產生的
Directions
Java 類別現在包含預設值。(b/141099045) - Safe Args 產生的
Args
Java 類別現在包含預設值。(b/140123727) - 使用
Toolbar
時,NavigationUI
不會再在兩個頂層目的地之間進行文字動畫變更。(b/140848160)
2.2.0-alpha03 版本
2019 年 9 月 18 日
發佈 androidx.navigation:navigation-*:2.2.0-alpha03
。2.2.0-alpha03 版本包含這些修訂版本。
行為變更
- 呼叫
setGraph
之後呼叫setViewModelStore()
會產生IllegalStateException
。這個值應一律在初始設定時由NavHost
設定,以確保所有NavBackStackEntry
執行個體的ViewModel
執行個體的儲存空間一致。(aosp/1111821)
修正錯誤
- 修正
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
會提供導航驅動的LifecycleOwner
、ViewModelStoreOwner
(與NavController.getViewModelStoreOwner()
傳回的相同)及SavedStateRegistryOwner
,此外還提供用來啟動該目的地的引數。(aosp/1101691、aosp/1101710)
修正錯誤
- 修正了透過
IllegalArgumentException
將NavHostFragment
新增至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 異動
- 從 導航
2.1.0-rc01
起:我們淘汰了2.1.0-alpha02
中推出的NavController
上的getViewModelStore()
API。(aosp/1091021)
修正錯誤
NavHostFragment
現使用FragmentContainerView
,修正了動畫 Z 排序問題,以及視窗觸發作業會轉移至片段的問題。(b/137310379)
版本 2.1.0
版本 2.1.0
2019 年 9 月 5 日
發佈 androidx.navigation:navigation-*:2.1.0
。您可以前往 這裡 查看這個版本包含的修訂版本。
自 2.0.0 版以來的重要異動
- 將 ViewModels 的範圍限定在導航圖中:現在可以建立 ViewModel,其範圍在導航圖層級,使用
by navGraphViewModels()
屬性分配,用於 Kotlin 使用-ktx
程式庫的用戶,或透過getViewModelStoreOwner()
API 新增至NavController
。詳情請參閱 在目的地之間共用 UI 相關資料。 - 對話方塊目的地:現在可以建立
<dialog>
目的地,它將在navigate
到它們時顯示DialogFragment
。NavHostFragment
預設支援對話方塊目的地。如需詳細資訊,請參閱 透過 DialogFragment 建立目的地。 - 使用 Uri 導航:現在可以使用
Uri
的navigate
,以使用新增至目的地的<deepLink>
進行導航。詳情請參閱 使用 Uri 導航。 - NavHostController:專屬用於建構自訂
NavHost
的 API 已移至NavHostController
,允許將實作NavController
連結至代管LifecycleOwner
、OnBackPressedDispatcher
及ViewModelStore
。
2.1.0-rc01 版本
2019 年 8 月 7 日
發佈 androidx.navigation:navigation-*:2.1.0-rc01
。您可以前往 這裡 查看這個版本包含的修訂版本。
API 異動
- 已移除
2.1.0-alpha02
中引入的NavController
的已淘汰getViewModelStore()
API。(aosp/1091021)
2.1.0-beta02 版本
2019 年 7 月 19 日
發佈 androidx.navigation:*:2.1.0-beta02
。您可以前往 這裡 查看這個版本包含的修訂版本。
修正錯誤
- 移除
2.1.0-beta01
中意外引入的 Jacoco 依附元件。(b/137782950)
版本 2.1.0-beta01
2019 年 7 月 17 日
發佈 androidx.navigation:*:2.1.0-beta01
。您可以前往 這裡 查看這個版本包含的修訂版本。
新功能
NavigationUI
現在可以動畫移除 Up 按鈕,同時使用setupWithNavController()
與Toolbar
或CollapsingToolbarLayout
搭配使用。(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()
方法已替換為NavHostController
的setOnBackPressedDispatcher()
方法,現在,必須先呼叫setLifecycleOwner()
才能呼叫此方法。(aosp/965409)NavHostController
現在包含enableOnBackPressed(boolean)
方法,可取代setHostOnBackPressedDispatcherOwner()
先前傳回的NavHostOnBackPressedManager
類別。(aosp/966091)
修正錯誤
- 修正問題:透過 URI 導航後,返回堆疊不正確。(b/132509387)
- NavController 自動處理的深層連結現在只會觸發一次。(b/132754763)
版本 2.1.0-alpha04
2019 年 5 月 16 日
發佈 androidx.navigation:*:2.1.0-alpha04
。您可以前往 這裡 查看這個版本包含的修訂版本。
修正錯誤
- 在攔截系統返回按鈕事件時,
NavHostFragment
會正確遵守app:defaultNavHost
,並修正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
時會顯示DialogFragment
。NavHostFragment
預設支援對話方塊目的地。b/80267254 - 除了使用資源 ID 或
NavDirections
執行個體呼叫navigate
之外,現在也可以透過Uri
進行導航,而後者會使用新增至目的地的<deepLink>
,以前往正確的目的地。b/110412864
行為變更
- NavigationUI 提供的預設動畫已經從 400ms 加速到 220ms,以便配合活動和片段的預設動畫速度。b/130055522
API 異動
NavHostFragment
的createFragmentNavigator()
方法已被淘汰,其功能也已移至新的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()
專屬委派,或使用新增至NavController
的getViewModelStore()
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.1
和androidx.fragment:fragment:1.1.0-alpha05
。這個版本也會移除androidx.legacy:legacy-support-core-utils:1.0.0
上的依附元件。b/128632612
API 異動
- 目前已新增
Navigation.createNavigateOnClickListener(NavDirections)
方法,從而替代使用資源 ID 和軟體包建立點擊事件監聽器。b/127631752 FragmentNavigator.instantiateFragment
目前已淘汰。預設實作現在使用FragmentFactory
對片段執行個體化。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 關鍵字(例如in
及fun
)。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:defaultValue
。b/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 參考,以及在Activity
或Fragment
中產生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()
方法已移至ActivityNavigator
。b/122413117 - Safe Args 現在可避免重複複製相同的操作類別,而不會執行任何引數。在產生的 NavDirections 類別中,沒有任何引數方法的傳回類型是
NavDirections
。b/123233147 - Safe Args 產生的「路線」類別已沒有公開的建構函式,因此您只能與產生的靜態方法互動。b/123031660
- Safe Args 產生的
NavDirections
類別不再有公開建構函式 - 只能透過產生的路線類別中的靜態方法產生。b/122963206 NavDirections
的getArguments()
傳回的Bundle
現已標示為@NonNull
,而非@Nullable
。b/123243957
修正錯誤
NavDeepLinkBuilder
現在會使用您傳遞的引數來判斷獨特性,以正確處理多個目的地PendingIntent
。b/120042732NavController
現在使用巢狀結構NavHostFragment
或其他帶有返回堆疊的子片段時,能正確處理popBackStack()
作業。b/122770335NavigationUI
現在會正確設定向上按鈕的內容說明。b/120395362- Safe Args 產生的「路線」類別現在可正確處理與目的地操作相同的 ID 的全域操作。b/122962504
- 當
equals()
傳回 true 時,Safe Args 產生的NavDirections
類別現在會擁有相同的hashCode()
值。b/123043662 - 如果您嘗試在
NavHostFragment
的FragmentManager
中自訂FragmentTransactions
,FragmentNavigator
現在會傳回更優質的錯誤訊息。請一律使用getChildFragmentManager()
。b/112927148
版本 1.0.0-alpha09
2018 年 12 月 18 日
這個版本包含重大 API 變更;請參閱下方的 重大變更 一節。
我們決定不繼續開發 android.arch.navigation:navigation-testing
構件。雖然經證明這對 NavController
的內部測試有幫助,但我們強烈建議採用其他測試策略 (例如模擬 NavController
執行個體),以驗證目前進行的 navigate()
呼叫正確無誤。2018 年 Android 開發人員高峰會的單次活動講座 詳細討論了這種做法,而我們也會專門針對導航測試提供更多說明文件。
新功能
menuCategory="secondary"
的MenuItem
搭配NavigationUI
使用時,不會再彈出返回堆疊。b/120104424AppBarConfiguration
現在可讓您設定備用的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
,取代可為空值的Bundle
。aosp/845616
修正錯誤
- 引數現在可從深層連結適當剖析為正確的
argType
,而非一律剖析為字串 b/110273284 - Navigation 現在可正確地匯出公開資源 b/121059552
- Safe Args 現在支援 Android Gradle 外掛程式 3.4 Canary 4 及以上版本 b/119662045
版本 1.0.0-alpha08
2018 年 12 月 6 日
這個版本包含重大 API 變更;請參閱下方的 重大變更 一節。
新功能
- 目的地標籤現在搭配
NavigationUI
方法使用時,將自動使用正確的引數取代android:label
中的{argName}
執行個體 b/80267266 - Navigation 現在依附於支援資料庫 28.0.0 b/120293333
重大變更
OnNavigatedListener
已重新命名為OnDestinationChangedListener
。b/118670572OnDestinationChangedListener
現在也會傳遞引數的Bundle
。aosp/837142- 移除了
app:clearTask
和app:launchDocument
屬性及其相關方法。您可以將app:popUpTo
與圖表根層級搭配使用,來移除返回堆疊中的所有目的地。b/119628354 ActivityNavigator.Extras
現在採用Builder
模式,並加入可設定任何Intent.FLAG_ACTIVITY_
標記的功能。aosp/828140NavController.onHandleDeepLink
已重新命名為handleDeepLink
。aosp/836063- 許多不適用於設定子類別的類別和方法 (例如
NavOptions
、NavInflater
、NavDeepLinkBuilder
和AppBarConfiguration
) 皆已設為final
。aosp/835681 - 移除了已淘汰的
NavHostFragment.setGraph()
方法。aosp/835684 - 移除了已淘汰的
NavigationUI.navigateUp(DrawerLayout, NavController)
方法。aosp/835684 - Fragment 建立程序已移至
FragmentNavigator
,以便將 Fragment 建立程序委派給FragmentFactory
。b/119054429 NavGraphNavigator
的建構函式不再接受Context
。aosp/835340- NavigatorProvider 現已成為類別,不再是介面。
getNavigatorProvider()
傳回的NavigatorProvider
並未改變其功能。aosp/830660 - 移除了
NavDestination.navigate()
。請改為透過Navigator
呼叫navigate()
。aosp/830663 - 大幅重構
Navigator
,不再需要使用OnNavigatorNavigatedListener
,而是改為讓navigate
傳回原本的導覽目的地NavDestination
。 Navigator
執行個體無法再將彈出事件傳送至NavController
。建議您使用OnBackPressedCallback
來攔截返回按鈕點按操作,並呼叫navController.popBackStack()
。aosp/833716
修正錯誤
- 現在當目的地為
<navigation>
元素時,popUpTo
會穩定運作 b/116831650 - 修正了因使用巢狀圖時發生
IllegalArgumentException
而導致的數個問題 b/118713731 b/113611083 b/113346925 b/113305559 <activity>
目的地的dataPattern
屬性現在可為引數填入非 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 日
新功能
- 全新的 AppBarConfiguration 類別可讓您自訂要列為「頂層」 的目的地。詳情請參閱 更新版說明文件。b/117333663
- 您現在可以將引數傳遞至圖表的起始目的地。b/110300470
- 深層連結現在支援含有半形句號、連字號和加號的自訂配置。b/112806402
重大變更
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 日
新功能
- 現在支援 Fragment 和 Activity 目的地的共用元素轉換 b/79665225。詳情請參閱 使用 Navigation 架構元件導入導航功能 一文
- 現在如果選取
NavigationView
中的某個項目,其所屬的所有底部功能表都會關閉 b/112158843
API 變更
- 重大變更: Navigator
navigate()
方法現在接受Navigator.Extras
參數。 - NavController 的
getGraph()
方法現在為NonNull
。b/112243286
修正錯誤
NavigationUI.setupWithNavController()
與個別目的地的檢視搭配使用時,不會再洩露檢視內容 b/111961977- 系統現在只會呼叫 Navigator
onSaveState()
一次 b/112627079
Safe Args
- 導覽目的地的 Directions 類別現在會擴充其父項 Directions 類別 (如果有的話) b/79871405
- Directions 和 Args 類別現在具備實用的
toString()
實作 b/111843389
版本 1.0.0-alpha05
2018 年 8 月 10 日
修正錯誤
- 修正導致返回堆疊行為不正確的錯誤。b/111907708
- 修正所產生的 Args 類別在
equals()
中的錯誤。b/111450897 - 修正 Safe Args 中的建構失敗問題。B/109409713
- 修正將資源 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/109826220Navigation 現在會對從深層連結網址剖析出的參數進行 URLDecode 處理。b/79982454
修正錯誤
修正了在透過 Fragment 生命週期方法呼叫 navigate 時發生的
IllegalStateException
。b/79632233Navigation 現在依附於支援資料庫 27.1.1,以修正使用動畫時的閃爍問題。b/80160903
修正了在使用 defaultNavHost="true" 做為子項片段時發生的
IllegalArgumentException
。b/79656847修正了在使用 NavDeepLinkBuilder 時發生的
StackOverflowError
。b/109653065修正了在導覽回巢狀圖時發生的
IllegalArgumentException
。b/80453447修正了使用
launchSingleTop
時的 Fragment 重疊問題。b/79407969Navigation 現在會為巢狀圖建構正確的合成返回堆疊。b/79734195
現在,使用巢狀圖做為
MenuItem
時,NavigationUI 會醒目顯示正確的項目。b/109675998
API 變更
淘汰了動作的
clearTask
屬性和NavOptions
中相關聯的 API。b/80338878淘汰了動作的
launchDocument
屬性和NavOptions
中相關聯的 API。b/109806636
版本 1.0.0-alpha01
2018 年 5 月 8 日
Navigation 提供一個架構,可用於建構應用程式內導航功能。初始版本為 1.0.0-alpha01
。