ניווט
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסה אלפא |
---|---|---|---|---|
13 בנובמבר 2024 | 2.8.4 | - | - | 2.9.0-alpha03 |
הצהרת יחסי תלות
כדי להוסיף תלות ב-Navigation, צריך להוסיף את מאגר Google Maven לפרויקט. למידע נוסף, אפשר לקרוא את המאמר מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים הנדרשים בקובץ build.gradle
של האפליקציה או המודול:
מגניב
dependencies { def nav_version = "2.8.0" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" }
Kotlin
dependencies { val nav_version = "2.8.0" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") }
Safe Args
כדי להוסיף ארגומנטים בטוחים
בפרויקט, כוללים את ה-classpath
הבא בקובץ build.gradle
ברמה העליונה:
מגניב
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
צריך גם להחיל אחד משני יישומי הפלאגין הזמינים.
כדי ליצור קוד שפה של Java שמתאים למודולים של Java או Java משולבים או Kotlin, מוסיפים
את השורה הבאה לקובץ build.gradle
של האפליקציה או המודול:
מגניב
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
לחלופין, כדי ליצור קוד Kotlin שמתאים למודולים של Kotlin בלבד, מוסיפים:
מגניב
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
חייב להיות לך android.useAndroidX=true
קובץ אחד (gradle.properties
) לפי
מעבר ל-AndroidX.
מידע על שימוש בתוספים של Kotlin זמין במסמכי התיעוד של ktx.
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה הזו, נשמח לשמוע מכם. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במסמכי התיעוד של Issue Tracker.
גרסה 2.9
גרסה 2.9.0-alpha03
13 בנובמבר 2024
androidx.navigation:navigation-*:2.9.0-alpha03
משוחרר. הגרסה 2.9.0-alpha03 מכילה את ההוספות האלה.
תכונות חדשות
- בטיחות מסוג ניווט תומכת עכשיו בסוגי ערכים כמסלול או כסוג הארגומנט של מסלול. (I9344a, b/374347483)
תיקוני באגים
- תוקנה בעיה מסוג
ConcurrentModificationException
שעלולה להתרחש כאשרLifecycleObserver
שמחובר ל-NavBackStackEntry
מפעיל שינוי בסטאק העורפי כשהמארחLifecycleOwner
, כמו הפעילות או הפלח שמכילים את ה-Activity, משנים את מצב מחזור החיים שלהם. (Ia9494)
גרסה 2.9.0-alpha02
30 באוקטובר 2024
androidx.navigation:navigation-*:2.9.0-alpha02
משוחרר. הגרסה 2.9.0-alpha02 מכילה את ההוספות האלה.
תרומה חיצונית
- שיטה נפוצה חדשה של
NavController.handleDeepLink(request: NavDeepLinkRequest)
. תודה Konstantin Tskhovrebov! (I3e228)
גרסה 2.9.0-alpha01
16 באוקטובר 2024
androidx.navigation:navigation-*:2.9.0-alpha01
משוחרר. הגרסה 2.9.0-alpha01 מכילה את ההוספות האלה.
תכונות חדשות
- מעכשיו, יוצרים של כלי ניווט מותאמים אישית יכולים לסמן את היעדים שלהם כמיישמים את הממשק
SupportingPane
. כך הם מציינים ל-NavController
שהיעדים האלה יוצגו לצד יעדים אחרים. באמצעות הממשק הזה, אפשר למשל להגדיר כמה יעדים כRESUMED
בו-זמנית. (Id5559) - מ-Navigation
2.8.3
: נוספו בדיקות איתור שגיאות בקוד חדשות למודולnavigation-common
, למודולnavigation-runtime
ולמודולnavigation-compose
כדי לזהות מסלולים בטוחים מבחינת סוגים שלא סומנו בצורה נכונה באמצעות@Serializable
. הבדיקה הזו חלה על כל פונקציות התוספיםNavGraphBuilder
ו-NavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - מ-Navigation
2.8.3
: נוספו בדיקות איתור שגיאות בקוד חדשות למודולnavigation-common
, למודולnavigation-runtime
ולמודולnavigation-compose
כדי לזהות מסלולים בטוחים מבחינת סוגים עם ארגומנטים של Enum שלא סומנו בצורה נכונה באמצעות@Keep
. הבדיקה הזו חלה על כל פונקציות התוספיםNavGraphBuilder
ו-NavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
שינויים בהתנהגות
- ניסיון להשתמש ב-
NavController
שעברDESTROYED
יגרום עכשיו ל-IllegalStateException
. (I520da, b/369616172)
תיקוני באגים
- עדכון של חריגה מסוג Enum class not found, עם הצעה לשימוש בהערה
@Keep
למקרה שמחלקת Enum נמחקת בגרסאות build מקוצרות. (I90e79, b/358137294)
בעיות מוכרות
- יש בעיה עם כללי ה-lint החדשים שנוספו ב-
Navigation 2.8.*
, שגורמים לשגיאהObsolete custom lint check
כשמנסים להריץ את ה-lint עם Android Gradle Plugin מגרסה 8.4 ואילך. (b/368070326, b/371463741)
גרסה 2.8
גרסה 2.8.4
13 בנובמבר 2024
androidx.navigation:navigation-*:2.8.4
משוחרר. גרסת 2.8.4 כוללת את ההוספות האלה.
תכונות חדשות
- מ-Navigation
2.9.0-alpha03
: אבטחה מסוג Navigation תומכת עכשיו בסיווג ערך כמסלול או כסוג הארגומנט של מסלול (I9344a, b/374347483)
תיקוני באגים
- מניווט
2.9.0-alpha01
: ניסיון להשתמש ב-NavController
שכברDESTROYED
יגרום עכשיו ל-IllegalStateException
. (I520da, b/369616172)
גרסה 2.8.3
16 באוקטובר 2024
androidx.navigation:navigation-*:2.8.3
משוחרר. גרסת 2.8.3 מכילה את ההוספות האלה.
תכונות חדשות
- נוספו בדיקות איתור שגיאות חדשות למודול
navigation-common
,navigation-runtime
ו-navigation-compose
כדי לזהות מסלולים בטוחים מבחינת סוגים שלא סומנו בצורה נכונה באמצעות@Serializable
. הבדיקה הזו חלה על כל פונקציות התוספיםNavGraphBuilder
ו-NavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - נוספו בדיקות איתור שגיאות חדשות במודולים
navigation-common
,navigation-runtime
ו-navigation-compose
כדי לזהות מסלולים בטוחים מבחינת סוגים עם ארגומנטים של Enum שלא סומנו בצורה נכונה באמצעות@Keep
. הבדיקה הזו חלה על כל פונקציות התוספיםNavGraphBuilder
ו-NavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
תיקוני באגים
- תוקנה בעיה שבה כללי האיתור של שגיאות בקוד החדשים שנוספו ב-
Navigation 2.8.*
גרמו לשגיאה מסוגObsolete custom lint check
כשניסיתם להריץ את האיתור של שגיאות בקוד באמצעות Android Gradle Plugin מגרסה 8.4 ואילך. (I1be3d, b/368070326, b/371463741)
בעיות מוכרות
- כשמנסים להריץ בדיקת איתור שגיאות בקוד (lint) עם Lint 16 (AGP 8.7) ואילך, תופיע שגיאה מסוג Obsolete custom lint check ב-Navigation lint. (b/371926651)
גרסה 2.8.2
2 באוקטובר 2024
androidx.navigation:navigation-*:2.8.2
משוחרר. גרסה 2.8.2 כוללת את ההוספות האלה.
תכונות חדשות
- התכונה Navigation Type Safety תומכת עכשיו בסוגי Serializable שכוללים
Double
, Double?
, DoubleArray
, DoubleArray?
, List<Double>
ו-List<Double>?
, בלי צורך ב-NavType
מותאם אישית. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
תיקוני באגים
- שיפרנו את הודעת השגיאה במקרה שהמערכת לא מצליחה למפות ארגומנט של מסלול ל-
NavType
. הודעת השגיאה החדשה תכלול את שם הארגומנט, את השם המלא והמפורט של הארגומנט ואת השם המלא והמפורט של המסלול. (Id8416, b/346264232)
גרסה 2.8.1
18 בספטמבר 2024
androidx.navigation:navigation-*:2.8.1
משוחרר. גרסת 2.8.1 כוללת את ההוספות האלה.
תכונות חדשות
- הוספנו כלל איתור שגיאות חדש כדי לוודא שייעשה שימוש בפונקציה
popBackStack
שמקבלת סוג של כיתה מופחתת כשמנסיםpopBackStack
באמצעות ממשקי API בטוחים מבחינת סוגים. (Ief161, b/358095343)
תיקוני באגים
- עכשיו, כדי לנווט, המסלול שמעבירים ל-
startDestination
שלNavGraph
צריך להכיל את הערכים של כל הארגומנטים הנדרשים, כולל ארגומנטים שלא יכולים להיות null ואין להם ערך ברירת מחדל. (I18e74, b/362594265) - נוספה תמיכה במחרוזות שלא יכולות להיות null ל-Navigation safe args, כך שערכים null ימוינו ויאוחסנו בחבילה כפי שהם. זה שונה מההתנהגות הקיימת, שבה ערכים null מפורקים לאובייקט null. השינוי הזה רלוונטי רק לסוגי String שאינם ניתנים לאפס. מחרוזות שניתן להגדיר להן ערך null לא משתנות. (I08b4a, b/348936238)
- אי אפשר יותר להוסיף קישור עומק ל-
NavDestination
, אלא רק דרך קישור עומק שנוסף במפורש ליעד. המשמעות היא שאפשר לנווט למסלול של יעד רק באמצעות עומס יתר של פונקציית הניווט שמקבלת מסלול מחרוזת. התיקון הזה מתקן נקודת חולשה שאפשרה ליצור קישור עומק ליעד שעשוי להיות מוגן. (Ie30e6)
עדכון יחסי תלות
- Navigation Safe Args תלוי עכשיו ב-Kotlin 1.9.24, במקום ב-Kotlin 2.X, כדי למנוע מהמפתחים צורך לעדכן את הקוד. (a4129a)
- עכשיו, כדי לכתוב אימייל חדש, צריך ללחוץ על כתיבה
1.7.2
.
גרסה 2.8.0
4 בספטמבר 2024
androidx.navigation:navigation-*:2.8.0
משוחרר. גרסה 2.8.0 כוללת את ההוספות האלה.
שינויים חשובים מאז גרסה 2.7.0
בטיחות סוגים ב-Navigation Kotlin DSL
- מעכשיו, Navigation מספק תמיכה ב-type safety ל-DSL של Kotlin (שמשמש את Navigation Compose) באמצעות Kotlin Serialization, כדי לאפשר לכם להגדיר יעדים בתרשים הניווט באמצעות אובייקטים וסיווגים של נתונים בטוחים מבחינת סוגים:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
מידע נוסף זמין בפוסט Navigation Compose meet Type Safety.
ניווט כתיבה חיזוי חזרה
- התכונה 'ניווט בכתיבה' תומכת עכשיו באפליקציה חזויה בחזרה באמצעות ממשקי ה-API החדשים של
SeekableTransitionState
מהאנימציה של הכתיבה. כך תוכלו להשתמש בתנועת החזרה כדי לראות את היעד הקודם עם המעבר המותאם אישית, לפני שתחליטו אם לאשר את העסקה באמצעות התנוחה המושלמת או לבטל אותה.
Navigation Fragment Composable
- הוספנו ארטיפקט
navigation-fragment-compose
חדש שכולל חלופה ל-ComposableNavHostFragment
שלNavHostFragment
, שמאפשרת להוסיף יעדים שניתנים ליצירה לקבצי ה-XML של הניווט. כל יעדcomposable
צריך להביע כשיטת@Composable
ברמה העליונה ללא ארגומנטים, שהשם המלא שלה משמש כמאפייןandroid:name
בכל יעד. כשמנווטים לאחד מהיעדים האלה, נוצר קטע מכיל כדי להציג את התוכן הקומפוזבילי.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
שינויים אחרים
- Navigation Compose תלוי עכשיו ב-Compose 1.7.0.
- ב-Navigation יש עכשיו סוג חדש,
CollectionNavType<T>
, שהוא תת-סוג שלNavType<T>
לארגומנטים שמבוססים על אוספים, כמו רשימות, מערכי נתונים ומפות. כל מערכיNavType
שמוגדרים כברירת מחדל (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
ו-StringArrayType
) יורשים עכשיו מהקלאס החדש הזה. NavType
כולל עכשיו תמיכה מובנית ברשימות של Int, String, Boolean, Float ו-Long.
גרסה 2.8.0-rc01
21 באוגוסט 2024
androidx.navigation:navigation-*:2.8.0-rc01
משוחרר. גרסת 2.8.0-rc01 כוללת את ההוספות האלה.
תיקוני באגים
- תיקון קריסה בניווט כשמעבירים כיתות Enum ברמה העליונה כארגומנטים בטוחים לסוג. (I0ba76, b/358137294)
- הגרסה 2.8 של Navigation פועלת עכשיו בצורה תקינה עם SDK 34, והיא לא תעבור ל-SDK 35 עד לפרסום הגרסה 2.9, יחד עם שאר ספריות AndroidX. (b/358798728)
גרסה 2.8.0-beta07
7 באוגוסט 2024
androidx.navigation:navigation-*:2.8.0-beta07
משוחרר. גרסת 2.8.0-beta07 כוללת את ההוספות האלה.
בעיות מוכרות
- עקב הבעיה ב-b/358137294, יש תמיכה מובנית רק ב-Enums שמוטמעים בתוך כיתה אחרת. תמיכה ב-Enums ברמה העליונה תתווסף במהדורה הבאה.
תיקוני באגים
- כשמנווטים ליעדי כפולים או משותפים, המערכת תעדיף את היעד הקרוב ביותר שמתאים למיקום הנוכחי בתרשים. (Ic89a4, b/352006850)
- הוספנו עכשיו
NavType.EnumType
חדש לניווט ב-safe args. המשמעות היא שסוגיEnum
כבר לא דורשיםNavType
מותאמים אישית. הערה: השדהSerialName
שלEnum
חייב להיות שם ברירת המחדל המוגדר במלואו. (I66d22, b/346475493) - הוספנו תמיכה מובנית בניווט ב-safe args לסוגים של ארגומנטים nullable,כולל
Int?
, Long?
, Float?
, Boolean?
ו-Enum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - עכשיו, ה-
startDestination
של ה-NavGraph
ישתמש בערכי ברירת המחדל של הארגומנטים אם המסלולstartDestination
שהוענק ל-NavGraph
שווה בדיוק ל-startDestination.route
. (I13762, b/354046047)
גרסה 2.8.0-beta06
24 ביולי 2024
androidx.navigation:navigation-*:2.8.0-beta06
משוחרר. גרסת 2.8.0-beta06 כוללת את ההוספות האלה.
תיקוני באגים
- תוקנה בעיה שבה בדיקות האיתור של שגיאות בקוד (lint) של
WrongStartDestinationType
לא בדקו אם יש אובייקטים מסוג Companion בסוג הכיתה שהוענק, וכתוצאה מכך אי אפשר היה לזהות את השגיאה. (I92b09)
גרסה 2.8.0-beta05
10 ביולי 2024
androidx.navigation:navigation-*:2.8.0-beta05
משוחרר. גרסת 2.8.0-beta05 כוללת את ההוספות האלה.
תיקוני באגים
- תיקון קריסה של ניווט ב-
singleTop
כש-NavGraphs
בתצוגת עץ משתפים את אותו מסלולstartDestination
. (I17b94, b/294408596)
גרסה 2.8.0-beta04
26 ביוני 2024
androidx.navigation:navigation-*:2.8.0-beta04
משוחרר. גרסת 2.8.0-beta04 כוללת את ההוספות האלה.
תיקוני באגים
- עכשיו יש תמיכה בניווט באמצעות מחרוזות ריקות בארגומנטים של נתיב. (Ic5dbd, b/339481310)
- שיפור הודעת השגיאה של סריאליזטורים מותאמים אישית שמוגדרים ישירות בשדות הכיתה באמצעות
@Serializable(with =...)
, כדי להבהיר שזו תכונה שאין לה תמיכה כרגע. (I052b0, b/341319151) - עכשיו אפשר להשתמש ב-
SavedStateHandleFactory
test api בבדיקות שאינן ל-Android, אבל כדי לעשות זאת, Robolectric צריך לתמוך בניתוח ארגומנטים באמצעות Bundles. (I76cdc, b/340966212) - תוקן קריסה שנגרמה כתוצאה משחזור המצב כשממשיכים את האפליקציה אחרי מוות של תהליך באמצעות ניווט בטוח לסוגים ב-Compose. (Ia8f38, b/341801005)
- תוקנה בעיה בתכונה 'ניווט בזמן כתיבת אימייל', שבה אחרי ביטול התנועה החזויית לאחור,
NavBackStackEntry
שאליו המשתמש חוזר אף פעם לא חוזר למצב מחזור החייםRESUMED
. כך גם מוודאים שהיעד שחוזרים אליו יחזור בצורה נכונה באנימציה, במקום להישאב למקומו אחרי תנועה מהירה. (I97a0c, b/346608857) - כשמשתמשים בתכונה 'חזרה חזוי' עם 'כתיבה בזמן ניווט', ליעד שיוצג בחלון קופץ תהיה עכשיו רמת z מתאימה, והוא יוצג באנימציה נכונה מעל היעד הנכנס. (I2077b, b/345993681)
גרסה 2.8.0-beta03
12 ביוני 2024
androidx.navigation:navigation-*:2.8.0-beta03
משוחרר. גרסת 2.8.0-beta03 כוללת את ההוספות האלה.
שינויים ב-API
- ל-
CollectionNavType
יש שיטהemptyCollection()
חדשה וחוסמת. אפשר לשנות את הגדרת ברירת המחדל הזו כדי לטפל באוסף ריק שמוענק כארגומנט. (Ie4d84, b/341723133)
תיקוני באגים
- הוספנו מסמך תיעוד לגבי
NavType.serializeAsValue
ו-serializeAsValues
כדי להדגיש שצריך לקודד את הפלט הסופי ב-Uri. (Ida6bd, b/344943214) - תוקנה קריסה שהתרחשה בקריאה ל-
toRoute<T>
עם ארגומנטCollectionNavType
null. כשמנווטים עםCollectionNavType
null, ארגומנט הפלט יהיה ערך ברירת המחדל שהוצהר בכיתה Serializable, או ערך ההחזרה שלemptyCollection()
אם אין ערך ברירת מחדל. (I84158, Id630f, b/342672856)
גרסה 2.8.0-beta02
29 במאי 2024
androidx.navigation:navigation-*:2.8.0-beta02
משוחרר. גרסת 2.8.0-beta02 כוללת את ההוספות האלה.
תיקוני באגים
- תוקן קריסה של
ClassCastException
במהלך שימוש ב-NavBackStackEntry.toRoute
עםNavType
מותאם אישית שיכול להיות null. (I1c29b, b/342239473) - תוקנו בעיות בשחזור המצב של סטאק העורפי של הניווט שנגרמו כשמנסים לשחזר רשומה בסטאק העורפי שלא ניתן להגיע אליה באמצעות מזהה מהיעד הנוכחי. מאחר שהנתיבים נתמכים במזהים, גם יעדים שנוצרו באמצעות נתיבים הושפעו מהבעיה. התיקון הזה מתקן גם קריסה שנגרמה על ידי קריאה ל-
clearBackStack()
עם אותה בעיה בסיסית. (I423c3, b/339908057)
גרסה 2.8.0-beta01
14 במאי 2024
androidx.navigation:navigation-*:2.8.0-beta01
משוחרר. גרסת 2.8.0-beta01 כוללת את ההוספות האלה.
שינויים ב-API
SavedStateHandle.toRoute()
מקבל עכשיו פרמטרtypeMap
לסוגי ארגומנטים מותאמים אישית. (Ie39fb, b/339026523)- הוספנו ממשק API לבדיקה ל-
navigation-testing
כדי ליצורSavedStateHandle
מאובייקט Serializable ב-Kotlin. (Id4867, b/339080702)
תיקוני באגים
- נוספו מסמכי עזרה לגבי פרמטרים חסרים בפונקציות של Navigation Kotlin DSL. (I26a36)
גרסה 2.8.0-alpha08
1 במאי 2024
androidx.navigation:navigation-*:2.8.0-alpha08
משוחרר. גרסת 2.8.0-alpha08 מכילה את ההוספות האלה.
Safe Args ב-Navigation Compose
- העבודה על תמיכה בבטיחות סוגים בזמן הידור עבור Navigation Compose ומשתמשים ב-Navigation Kotlin DSL שמבוסס על Kotlin Serialization הסתיימה, וממשקי ה-API הניסיוניים הקודמים עברו למצב יציב. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
הפונקציונליות הזו משתמשת ב-Kotlin Serialization כדי לאפשר לכם להגדיר יעדים בתרשים הניווט באמצעות אובייקטים בטוחים לסוג וסיווגים של נתונים:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
מידע נוסף זמין בפוסט Navigation Compose meet Type Safety.
תכונות חדשות
- הארטיפקט
navigation-fragment-compose
מספק עכשיו קומפוזיציה שלLocalFragment
שמקומית לשיטות הניתנות ליצירה בתוךComposableFragment
. (If35e5) NavType
כולל עכשיו תמיכה מובנית ברשימות של Int, String, Boolean, Float ו-Long. (I4b6dd, Ia914c, b/188693139)
גרסה 2.8.0-alpha07
17 באפריל 2024
androidx.navigation:navigation-*:2.8.0-alpha07
משוחרר. גרסת 2.8.0-alpha07 מכילה את ההוספות האלה.
תכונות חדשות
הוספת פריט
navigation-fragment-compose
חדש שכולל חלופה שלComposableNavHostFragment
ל-NavHostFragment
, שמאפשרת להוסיף יעדים מסוגcomposable
לקובצי ה-XML של הניווט. כל יעדcomposable
צריך להביע כשיטת@Composable
ברמה העליונה ללא ארגומנטים, שהשם המלא שלה משמש כמאפייןandroid:name
בכל יעד. כשמנווטים לאחד מהיעדים האלה, נוצר קטע מכיל כדי להציג את התוכן הקומפוזבילי. (I0ef2e, b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
שינויים ב-API
- התמיכה ב-Safe Args ב-Navigation Compose באמצעות גישה שמבוססת על Serialization ב-Kotlin נמשכת. ממשקי ה-API האלה עדיין לא הושלמו ומסומנים בהערה
ExperimentalSafeArgsApi
. ההערה הזו תוסר כשכל ממשק ה-API יושלם בגרסה עתידית. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
גרסה 2.8.0-alpha06
3 באפריל 2024
androidx.navigation:navigation-*:2.8.0-alpha06
משוחרר. גרסת 2.8.0-alpha06 כוללת את ההוספות האלה.
שינויים ב-API
- התחלנו לתמוך ב-Safe Args ב-Navigation Compose באמצעות גישה שמבוססת על Serialization ב-Kotlin. ממשקי ה-API האלה עדיין לא הושלמו ומסומנים בהערה
ExperimentalSafeArgsApi
. ההערה הזו תוסר כשכל ממשק ה-API יושלם בגרסה עתידית. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
תיקוני באגים
NavHost
משתמש עכשיו ב-Alignment.TopStart
כארגומנט ברירת המחדל של contentAlignment. כך הוא תואם לערך ברירת המחדל שלAnimatedContent
, ומתקן מקרים מסוימים של שינוי לא צפוי של קנה המידה במעבר ממרכז. (I09e72, b/330111602)- כשמבצעים את המחווה החזרה החזוייה בזמן השימוש בתכונה 'ניווט בזמן כתיבת אימייל', הלחצן
NavHost
ישלים עכשיו את המעבר המותאם אישית בצורה נכונה במקום לסיים מיד. (I99017, b/327292110)
גרסה 2.8.0-alpha05
20 במרץ 2024
androidx.navigation:navigation-*:2.8.0-alpha05
משוחרר. גרסת 2.8.0-alpha05 כוללת את ההוספות האלה.
תכונות חדשות
- עכשיו אפשר להעביר ארגומנטים ל-
startDestination
שלNavGraph
ישירות במסלולstartDestination
בלי להסתמך עלdefaultValue
. הכלל הזה חל גם עלNavGraph
startDestinations
בתצוגת עץ. (I0e0b5, b/109505019, b/188693139)
שינויים ב-API
- נוספה כיתה
CollectionNavType<T>
חדשה וחופשית, Subclass שלNavType<T>
לארגומנטים שמבוססים על אוספים, כמו רשימות, מערכים ומפות. (Ic6d63, b/188693139) - כל מערכי ברירת המחדל של
NavType
(IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
ו-StringArrayType
) הם עכשיו מסוגCollectionNavType
(Idcf79, b/188693139) NavType
מספק עכשיו ממשקvalueEquals
API פתוח חדש שקובע אם שני ערכים מאותו סוג שווים זה לזה. (I6cb97, b/327229511)
תיקוני באגים
- פרמטרים של שאילתות בקישורי עומק מאפשרים עכשיו להשתמש בערכים בצורת סוגריים מסולסלים סביב שם הארגומנט (כלומר
{argName}
) כערכים תקינים ל-NavTypes
שמבוסס על מחרוזת. כך מתקנים בעיה שבה ערך כזה נחשב לא חוקי (או ללא ערך) לכל הסוגים. (I18302, b/327274038) - פונקציות
NavController
שתומכות במסלולים כמוnavigate
אוpopBackStack
יכולות עכשיו להתאים כראוי למסלולים שממולאים בארגומנטים של מערךNavTypes
. (Iea805, b/327229511)
גרסה 2.8.0-alpha04
6 במרץ 2024
androidx.navigation:navigation-*:2.8.0-alpha04
משוחרר. גרסת 2.8.0-alpha04 מכילה את ההוספות האלה.
תכונות חדשות
- עכשיו אפשר לציין את
SizeTranform
למעברים ב-Navigation Compose על ידי הגדרה שלהם כחלק מההפעלה של הפונקציותcomposable
ו/אוnavigation
. (I91062, b/296912651)
תיקוני באגים
- תוקנה בעיה שבה הסמל
NavHost
בתפריט הניווט של כתיבת האימייל לא הציג את המעבר בצורה תקינה כשמשתמשים ב'חזרה אחורה' במערכת בלי מחווה. (Iceeae, b/325998468)
גרסה 2.8.0-alpha03
21 בפברואר 2024
androidx.navigation:navigation-*:2.8.0-alpha03
משוחרר. גרסה 2.8.0-alpha03 מכילה את ההוספות האלה.
שינויים ב-API
NavBackStackEntry.savedStateHandle
מסומן עכשיו כ-@MainThread
כי הוא משתמש בקוד שצריך להיות בכל מקרה בשרשור הראשי. (Ibb988, b/299523245)
תיקוני באגים
- תוקנה בעיה בניווט שגרמה ל-
NavGraph
ViewModels להיותDESTROYED
מוקדם מדי כיViewModel
של הרשומה המשויכת לא היה חלק מהמצב השמור. (Ib6bb7, b/317581849)
עדכון יחסי תלות
- Navigation Compose תלוי עכשיו ב-Compose 1.7.0-alpha03.
גרסה 2.8.0-alpha02
7 בפברואר 2024
androidx.navigation:navigation-*:2.8.0-alpha02
משוחרר. גרסה 2.8.0-alpha02 כוללת את ההצהרות האלה.
תכונות חדשות
- התכונה 'ניווט בכתיבה' תומכת עכשיו באפליקציה חזויה בחזרה באמצעות ממשקי ה-API החדשים של
SeekableTransitionState
מהאנימציה של הכתיבה. כך תוכלו להשתמש בתנועת החזרה כדי לראות את היעד הקודם עם המעבר המותאם אישית, לפני שתחליטו אם לאשר את העסקה באמצעות התנוחה המושלמת או לבטל אותה. (I8b8e9)
גרסה 2.8.0-alpha01
24 בינואר 2024
androidx.navigation:navigation-*:2.8.0-alpha01
משוחרר. גרסה 2.8.0-alpha01 כוללת את ההצהרות האלה.
תיקוני באגים
- תוקן דליפת
BackStackState
שבה מספר קריאותsaveState
ליעד גרמו לשמירת כמה מצבים, אבל ניתן היה לשחזר רק את המצב הראשון. (I598b0, b/309559751) - תוקנה בעיה שבה ארגומנטים שאינם מחרוזות לא הוצגו כראוי כשמשתמשים בעזרים של
NavigationUI
כדי לאכלס את השם של שורת האפליקציה. (#636, b/316676794)
עדכון יחסי תלות
- עכשיו, התכונה 'ניווט ב-Compose' תלויה בתיקון של בעיה ב-Compose
1.7.0-alpha01
שעלולה לגרום לאנימציית שינוי קנה מידה בלתי צפויה. (b/297258205)
תרומה חיצונית
- תודה ל-SimonMarquis על תיקון בעיית התצוגה של ארגומנטים שאינם מחרוזות כשמשתמשים בעזרים של
NavigationUI
כדי לאכלס את השם של שורת האפליקציה.
גרסה 2.7.7
גרסה 2.7.7
7 בפברואר 2024
androidx.navigation:navigation-*:2.7.7
משוחרר. גרסה 2.7.7 כוללת את ההצהרות האלה.
תיקוני באגים
- הוטמעה גרסה קודמת מ-Navigation
2.8.0-alpha01
: תוקן דליפתBackStackState
שבה מספר קריאותsaveState()
ל-NavBackStackEntry
יחיד היו גורמות לשמירת כמה מצבים, אבל ניתן היה לשחזר רק את המצב הראשון שנשמר. (I598b0, b/309559751) - הוספה לאחור מ-Navigation
2.8.0-alpha01
: תוקנה בעיה שבה ארגומנטים שאינם מחרוזות לא הוצגו כראוי כשמשתמשים בעזרים שלNavigationUI
כדי לאכלס את השם של שורת האפליקציות. (#636, b/316676794)
תרומה חיצונית
- תודה ל-SimonMarquis על תיקון בעיית התצוגה של ארגומנטים שאינם מחרוזות כשמשתמשים בעזרים של
NavigationUI
כדי לאכלס את השם של שורת האפליקציה.
גרסה 2.7.6
גרסה 2.7.6
13 בדצמבר 2023
androidx.navigation:navigation-*:2.7.6
משוחרר. גרסה 2.7.6 מכילה את ההוספות האלה.
תיקוני באגים
- הפונקציה
NavGraph
equals()
מביאה עכשיו בחשבון בצורה נכונה את הצמתים של התרשים השני, במקום רק את התרשים שממנו היא נקראת. כך תוכלו לוודא שגרפים עם צמתים עם מזהים שונים לא ייחשבו יותר כזהים (I401cb, b/311414915)
גרסה 2.7.5
גרסה 2.7.5
1 בנובמבר 2023
androidx.navigation:navigation-*:2.7.5
משוחרר. גרסה 2.7.5 כוללת את השינויים האלה.
שיפורי ביצועים
- שיפור משמעותי בביצועים (גם מבחינת זמן וגם מבחינת מספר ההקצאות) של השוואה בין שני תרשימים. המשמעות היא שקריאות כמו
setGraph
, שמבצעות השוואה פנימית בין התרשים החדש לבין התרשים הקיים, מהירות הרבה יותר וכתוצאה מכך יש פחות פריימים מושמטים. תודה ל-Michał Z על הניתוח המקיף שהוביל לשיפור הזה. (I6ad62) NavHost
ייצור עכשיו את יעד ההתחלה במעבר הראשון של ה-composition, במקום להמתין למעבר השני כדי לקרוא את המצב המעודכן. (I439a7, b/304852206)
תיקוני באגים
- תוקנה בעיה שבה סטאק הקוד הקודם יוסר אם תפעילו את
setGraph
יותר מפעם אחת עם אותו תרשים בדיוק, רק אם היה יעד בתרשים שהכיל פעולה שמקשרת בין שני יעדים. (Ieaed7) - תיבת דו-שיח שעברתם אליה וביטלת אותה ברצף מהיר לא תופיע יותר ברשימה של
NavController.visibleEntries
. (I67586, b/287969970) - כשהערך של
saveState
הוא false, עכשיוViewModel
של הערך יימחק כראוי אחרי שהערך יוסר מהמצב. (Idf242, b/298164648) - תוקנה בעיה שבה
NavController
יכול לטפל באותו קישור עומק יותר מפעם אחת אם סטאק החזרה לאחור היה ריק לחלוטין לפני שינוי הגדרה או קריאה ל-setGraph
, רק אם הדגלFLAG_ACTIVITY_NEW_TASK
הוגדר ב-Intent הנכנס. (I73c7f)
עדכוני יחסי תלות
- הניווט באמצעות קטעי קוד (Fragments) תלוי עכשיו ב-Fragment 1.6.2, ותוקנה בעיה שבה המופעים
ViewModel
של קטעי קוד בתצוגת עץ לא נמחקו כשקוראים ל-clearBackStack
.
גרסה 2.7.4
גרסה 2.7.4
4 באוקטובר 2023
androidx.navigation:navigation-*:2.7.4
משוחרר. גרסה 2.7.4 כוללת את השמירות האלה.
תכונות חדשות
- הוספנו תמיכה ב-
popUpTo
לשימוש במסלולים עם ארגומנטים, כדי לאפשר לחזור לאחור לרשומה ספציפית שמשתמשת באותם ארגומנטים בדיוק, בהתאם לתמיכה שקיימת ב-popBackStack
. (I731f4, b/299255572)
תיקוני באגים
- תוקנה בעיה שבה הפרעה לניווט באמצעות ניווט אחר באמצעות
popUpTo
גורמת לקריסה שלFragmentNavigator
. (I3c848, b/301887045) - תוקנה בעיה שבה לחיצה על לחצן החזרה לאחור במערכת גרמה לכך שה-
currentDestination
לא יתעדכן בצורה נכונה בהתאם ל-Fragment המוצג. (Id0d6c, b/289877514) - מחזור החיים של
DialogFragment
יעבור עכשיו כראוי למצבRESUMED
כשתיבת הדו-שיח שמעליו תיסגר. (I88f0d, b/301811387)
גרסה 2.7.3
גרסה 2.7.3
20 בספטמבר 2023
androidx.navigation:navigation-*:2.7.3
משוחרר. גרסה 2.7.3 מכילה את ההוספות האלה.
תיקוני באגים
- תוקנה בעיה בניווט באמצעות קטעים שגרמה לכך שהרשימה
visibleEntries
מכילה רשומות שגויות. (I5caa9, b/288520638) - תוקנה בעיה שגרמה לכך שהיעד 'חלון צף' (כלומר,
Dialogs
, Bottomsheets
וכו') אף פעם לא מקבל קריאה חוזרת ל-Lifecycle שלRESUMED
. (I3b866, b/287505132)
גרסה 2.7.2
גרסה 2.7.2
6 בספטמבר 2023
androidx.navigation:navigation-*:2.7.2
משוחרר. גרסה 2.7.2 כוללת את השינויים האלה.
תיקוני באגים
- הניווט תלוי עכשיו ב-Lifecycle
2.6.2
, וכך מתוקן אינטראקציה ביןrememberSaveable
לביןNavHost
של Navigation Compose, שגורמת לכך שלא ניתן יהיה לשחזר כראוי את המצב שלrememberSaveable
של יעדים ואת כל המופעים שלSavedStateHandle
בבעלותViewModel
אחרי מוות של תהליך ויצירה מחדש שלו. (b/298059596, b/289436035) - תוקנה בעיה שבה מוצגות בו-זמנית כמה תיבות דו-שיח בחלונית הניווט לכתיבה, כאשר תיבות הדו-שיח המוסתרות חלקית (למשל, לא תיבת הדו-שיח העליונה) נמצאות בסטטוס
CREATED
של מחזור חיים במקום בסטטוסSTARTED
. (aosp/2728520, b/289257213) - תוקנה בעיה שבה מוצגות בו-זמנית כמה תיבות דו-שיח ב'ניווט לכתיבה', וכאשר סוגרים את תיבת הדו-שיח העליונה, תיבת הדו-שיח העליונה החדשה נתקעת במצב
STARTED
במחזור החיים במקום לעבור כראוי ל-RESUMED
. (aosp/2629401, b/286371387) - Navigation Safe Args כבר לא יוצר את המשימות שלו באופן מיידי אם הן לא מבוצעות בפועל. (I0e385, b/260322841)
עדכון יחסי תלות
- התכונה 'כתיבה מהירה' בניווט תלויה עכשיו ב-Compose 1.5.1.
גרסה 2.7.1
גרסה 2.7.1
23 באוגוסט 2023
androidx.navigation:navigation-*:2.7.1
משוחרר. גרסה 2.7.1 כוללת את השמירות האלה.
תיקוני באגים
- תוקנה בעיה בניווט באמצעות Compose, שבה כשמשתמשים ב-
Scaffold
, יכול להיות שתופיע הודעת שגיאה על ניסיון לגשת ל-Lifecycle.State.DESTROYED
ViewModel
. (I1dc11, b/268422136)
גרסה
גרסה
9 באוגוסט 2023
androidx.navigation:navigation-*:2.7.0
משוחרר. גרסה 2.7.0 כוללת את ההצהרות האלה.
שינויים חשובים מאז גרסה 2.6.0
אנימציות מ-Accompanist
עכשיו, כש-AnimatedContent
יציב, הצלחנו להעביר את הקוד מ-אנימציית הניווט של 'התכונת 'הנחיה'' חזרה ל-Navigation Compose עצמו.
כלומר, כל התמיכה בהגדרת מעברים מותאמים אישית שהיתה ב-AnimatedNavHost
קיימת ישירות ב-NavHost
.
לא יבוצעו שינויים נוספים באנימציית הניווט של Accompanist, ואנחנו נפסיק את השימוש בה רשמית בקרוב, יחד עם הנחיות למעבר בחזרה ל-Navigation Compose עצמו. עם זאת, ההנחיות יהיו הפוכות למדריך ההעברה, ולא נדרשים שינויים אחרים בממשק ה-API אם אתם כבר משתמשים בגרסת האלפא האחרונה של Accompanist (0.31.2-alpha
). (b/197140101)
תיקוני באגים
- NavHost בתכונה 'כתיבה בזמן ניווט' עכשיו מיירט כראוי קריאות חזרה למערכת גם אחרי שהפעילות הופסקה והמשיכה. (Icb6de, b/279118447)
עדכוני יחסי תלות
- הניווט תלוי עכשיו בסמל הכתיבה
1.5.0
למעלה מ-1.1.0
.
גרסה 2.7.0-rc01
26 ביולי 2023
androidx.navigation:navigation-*:2.7.0-rc01
משוחרר. גרסה 2.7.0-rc01 כוללת את ההוספות האלה.
תיקוני באגים
- תוקנה בעיה שבה פונקציות הלוגריתם הרגילות (lambda)
EnterTransition
ו-ExitTransition
שנוצרו כחלק מ-NavHost
עלולות להישאר בזיכרון גם אחרי שה-NavHost
יוסר מההרכב. (I893d0)
בעיות מוכרות
- יש בעיה בגרסה 2.6.x של Navigation, שבה ניווט באמצעות popUpTo עלול לגרום ל-
IllegalArgumentException
. יכול להיות שאפשר למנוע את החריג הזה על ידי שינוי המבנה של התרשים, בדומה לטיפים שמופיעים כאן. (b/287133013)
גרסה 2.7.0-beta02
28 ביוני 2023
androidx.navigation:navigation-*:2.7.0-beta02
משוחרר. גרסה 2.7.0-beta02 מכילה את ההצהרות האלה.
תיקוני באגים
- ל-Navigation Compose יש עכשיו סדר z מתאים למעברים מותאמים אישית שמשתמשים באפשרות 'ניווט' עם
popUpTo
. (/Ib1c3a, b/285153947)
גרסה 2.7.0-beta01
7 ביוני 2023
androidx.navigation:navigation-*:2.7.0-beta01
משוחרר. גרסה 2.7.0-beta01 מכילה את ההצהרות האלה.
תיקוני באגים
NavHost
בתפריט הניווט 'כתיבה' עכשיו מאפשרת ליירט כראוי שיחות חזרה מהמערכת, גם אחרי שActivity
STOPPED
וRESUMED
. (Icb6de, b/279118447)
גרסה 2.7.0-alpha01
24 במאי 2023
androidx.navigation:navigation-*:2.7.0-alpha01
משוחרר. גרסה 2.7.0-alpha01 כוללת את ההצהרות האלה.
אנימציות מ-Accompanist
עכשיו, כש-AnimatedContent
יציב, הצלחנו להעביר את הקוד מ-אנימציית הניווט של 'התכונת 'הנחיה'' חזרה ל-Navigation Compose עצמו.
כלומר, כל התמיכה בהגדרת מעברים מותאמים אישית שהיתה ב-AnimatedNavHost
קיימת ישירות ב-NavHost
.
לא יבוצעו שינויים נוספים באנימציית הניווט של Accompanist, ואנחנו נפסיק את השימוש בה רשמית בקרוב, יחד עם הנחיות למעבר בחזרה ל-Navigation Compose עצמו. עם זאת, ההנחיות יהיו הפוכות למדריך ההעברה, ולא נדרשים שינויים אחרים בממשק ה-API אם אתם כבר משתמשים בגרסת האלפא האחרונה של Accompanist (0.31.2-alpha
). (b/197140101)
תיקוני באגים
- מניווט
2.6.0-rc02
: תוקנה בעיה בניווט בקטעי קוד (fragments). כשמנווטים באמצעותpopUpTo
ומוציאים קטע קוד מהמקבץ האחורי בלי ליצור מחדש את התצוגה שלו, המערכת הפסיקה לפעול. (Ieb8d4, b/281726455)
עדכוני יחסי תלות
- הניווט תלוי עכשיו בסמל הכתיבה
1.5.0-beta01
.
גרסה 2.6.0
גרסה 2.6.0
7 ביוני 2023
androidx.navigation:navigation-*:2.6.0
משוחרר. גרסה 2.6.0 כוללת את השמירות האלה.
שינויים חשובים בניווט מאז גרסה 2.5.0
- עכשיו,
arguments
שלNavBackStackEntry
ו-arguments
שהועברו ל-OnDestinationChangedListener
הם רק עותק של הארגומנטים הבלתי משתנים שנוצרו כשנווטתם ליעד. המשמעות היא ששינויים שתבצעו בחבילות האלה לא ישתקפו בגישה הבאה ל-arguments
או למכונותOnDestinationChangedListener
אחרות. - עכשיו יש ב-
NavDeepLink
תמיכה בערכי ברירת מחדל למערכים, שמאפשרת תמיכה בפרמטרים חוזרים של שאילתות שימופו לסוג המערך של הארגומנט.NavType
כולל עכשיו גם שיטת ברירת מחדל שאפשר לשנות כדי לשלב שני ערכים שעברו ניתוח. - מעכשיו, תתי-כיתות בהתאמה אישית של
NavType
יכולות לשנות אתserializeAsValue
כדי לסריאליזציה ערך למחרוזת, וכך לאפשר את האנקפסולציה המלאה של הסריאליזציה וההמרה מהסריאליזציה (דרךparseValue
) בכיתהNavType
.StringType
משנה עכשיו את השיטה הזו כדי לקרוא ל-Uri.encode
ב-String
הנתון.
שינויים חשובים ב-Navigation Compose מגרסה 2.5.0
- כשמציגים תצוגה מקדימה של רכיב מורכב באמצעות
NavHost
, עכשיו מוצג כברירת מחדלstartDestination
של NavGraph. - עכשיו אפשר להשתמש ב-
NavController.popBackStack(route)
, ב-NavController.getBackStackEntry(route)
וב-NavController.clearBackStack(route)
כדי לשלוח מסלולים עם ארגומנטים שממולאים חלקית או במלואם. חשוב לזכור שהארגומנטים חייבים להתאים בדיוק לארגומנטים של הרשומה. - ניסיון ליצור
NavDeepLink
ריק באמצעותnavDeepLink
Kotlin DSL יוביל עכשיו לאזהרת איתור שגיאות בקוד (lint) שמציינת שלקישור עומק צריכים להיות uri, פעולה ו/או mimetype כדי שהוא יהיה תקף.
שינויים חשובים בניווט באמצעות קטעים מאז גרסה 2.5.0
NavHostFragment
כבר לא מיירט את לחצן החזרה אחורה במערכת עצמו. כך ה-FragmentManager
הבסיסי יכול לטפל בלחצן החזרה למערכת. כך, Fragment1.7.0-alpha01
ומעלה יכול לספק אנימציית חזרה חזויה בתוך האפליקציה במכשירי Android U.- כשמשתמשים בניווט עם קטעי קוד, ניסיון לבצע
FragmentTransaction
באופן ידני שמוסיף קטע קוד למחסנית הקוד הקודמת שלFragmentManager
יגרום להפעלתIllegalArgumentException
. תמיד צריך להוסיף מקטעים דרך ה-API שלnavigate()
. - כשמשתמשים במחרוזת המדויקת
${applicationId}
כתובת Placeholder במאפייניםapp:data
ו-app:dataPattern
ברכיב הפעילות בקובץ XML של הניווט,packageName
של ההקשר יאוכלס באופן אוטומטי ב-Placeholder במהלך ההנפה. FragmentNavigator
משתמש עכשיו בממשקי ה-API של המעבר כשמנווטים ב-NavBackStackEntries
ומציגים אותו בחלון קופץ. המשמעות היא שה-NavBackStackEntry
Lifecycle
יחכה עכשיו עד שהאפקטים המיוחדים של החלק שנכנס והחלק שיוצא יסתיימו, לפני שהוא יעביר את ה-Lifecycle.State
הסופי.DialogFragmentNavigator
משתמש עכשיו בממשקי ה-API של המעבר כשמנווטים ב-NavBackStackEntries
ומציגים אותו בחלון קופץ. פירוש הדבר הוא ש-NavBackStackEntry
Lifecycle
ימתין עכשיו עד ש-DialogFragment
Lifecycle
יעברו ל-DESTROYED
, ואז יעברו בעצמם ל-DESTROYED
.- עכשיו אפשר לאחזר את
NavController
דרךNavHostFragment
ברגע שה-NavHostFragment
מצורף ל-FragmentManager
, ולא רק אחריonCreate()
. - התמיכה של התכונה 'ניווט' במודולים של פיצ'רים דינמיים תלויה עכשיו בספרייה המפורטת של Play Feature Delivery.
- Navigation Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.3.0. המשמעות היא שהיא תואמת עכשיו רק לגרסאות 7.3.0 ואילך.
שינויים חשובים ב-NavigationUI מאז גרסה 2.5.0
- כשמעבירים את המזהה של תרשים ניווט אל
AppBarConfiguration
(למשל דרךMenu
),NavigationUI
מתייחס עכשיו ליעד ההתחלה של תרשים הניווט הזה בלבד בתור יעד ברמה העליונה, במקום לסמן בטעות כל יעד בתרשים בתור יעד ברמה העליונה. ההתנהגות של העברת המזהה של יעד ספציפי לא השתנתה. אותה פונקציונליות זמינה לקוד שלכם באמצעות הפונקציה החדשהisTopLevelDestination
ב-AppBarConfiguration
. - השילובים של
setupWithNavController
ב-NavigationUI
לעבודה עם שורת האפליקציה העליונה ינתחו עכשיו את הערכים שלR.string
עבור ארגומנטים שלReferenceType
שנמצאים ב-android:label
לערכי המחרוזת שלהם, במקום להפיק את המספר השלם של המשאב שנוצר באופן אוטומטי. NavigationUI
מספק עכשיו יומנים כשהוא לא מצליח לנווט דרךMenuItem
שנבחר.
גרסה 2.6.0-rc02
24 במאי 2023
androidx.navigation:navigation-*:2.6.0-rc02
משוחרר. גרסה 2.6.0-rc02 כוללת את השמירות האלה.
תיקוני באגים
- תוקנה בעיה בניווט ב-Fragments, שבה ניווט באמצעות
popUpTo
והוצאה של fragment מסטאק העורפי בלי ליצור מחדש את התצוגה שלו גרמו למערכת להפסיק לפעול. (Ieb8d4, b/281726455)
גרסה 2.6.0-rc01
10 במאי 2023
androidx.navigation:navigation-*:2.6.0-rc01
משוחרר. גרסה 2.6.0-rc01 כוללת את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה בניווט עם קטעי קוד, שבה הסרת קטע קוד באמצעות navigate עם
popUpTo
בקריאה החוזרת ל-lifecycleonResume()
גורמת ל-IllegalStateException
. (I21884, b/279644470)
גרסה 2.6.0-beta01
19 באפריל 2023
androidx.navigation:navigation-*:2.6.0-beta01
משוחרר. גרסה 2.6.0-beta01 מכילה את ההתחייבויות האלה.
תכונות חדשות
NavBackStackEntry
מספק עכשיו הטמעה בהתאמה אישית שלtoString
. (Iff00b)
תיקוני באגים
- כשמשתמשים בניווט עם קטעי קוד, ניסיון לבצע
FragmentTransaction
באופן ידני שמוסיף קטע קוד למחסנית הקוד הקודמת שלFragmentManager
יגרום להפעלתIllegalArgumentException
. תמיד צריך להוסיף מקטעים דרך ה-API שלnavigate()
. (I6d38e) - כשיש
navigate
שמוסיף רשומה ו-popBackStack
שמסיר אותה באותה מסגרת, הרשומה העליונה בתוצאה בסטאק האחורי תמיד תגיע חזרה ל-RESUMED
Lifecycle.State
. (Id8067, b/276495952)
גרסה 2.6.0-alpha09
5 באפריל 2023
androidx.navigation:navigation-*:2.6.0-alpha09
משוחרר. גרסה 2.6.0-alpha09 מכילה את ההוספות האלה.
תיקוני באגים
- תיקנו את הבדיקות למסלול לא תקין, כך שאם
NavDestination
מכילNavArgument
שאינו nullable, המסלול של היעד הזה חייב להכיל placeholders ל-args ששמותיהם זהים לשם שלNavArgument
שאינו nullable. (Ic62bf, b/274697949) - ניווטים לקישור עומק שמבוססים על
Action/MimeType
ייכשל עכשיו אם בפעולה הניווט חסרהNavArgument
שאינה ניתנת לאפס, שנדרשת על ידיNavDestination
שAction/MimeType
תואם אליו. (Ibfa17, b/271777424) - כש-
NavController
מגדיר גרף עם אותו מסלול ויעדים כמו בגרף הקודם, הוא מחליף עכשיו בצורה תקינה את צמתים הגרף הנוכחיים ואת היעדים בסטאק העורפי במופעים חדשים. התיקון הזה מטפל בקריסה שמתרחשת כשמשתמשים ב-onLaunchSingleTop
בלי לשמור את המצב ב'כתיבה בזמן ניווט'. התיקון הזה גם מתקן שגיאה שבה מנווטים ליעדי build שמשויכים לגרף הבסיס, וכן סטאק לא תקין של חזרה אחורה. (I5bc58, b/275258161, b/275407804)
גרסה 2.6.0-alpha08
22 במרץ 2023
androidx.navigation:navigation-*:2.6.0-alpha08
משוחרר. גרסה 2.6.0-alpha08 מכילה את ההוספות האלה.
תכונות חדשות
- עכשיו אפשר לאחזר את
NavController
דרךNavHostFragment
ברגע שה-NavHostFragment
מצורף ל-FragmentManager
, ולא רק אחריonCreate()
. (Ic6382, b/220186282)
תיקוני באגים
- תוקנה בעיה ב-
NullPointerException
כשפופ מגרף בתצוגת עץ שכולל ארגומנט שאינו nullable. (6b3581, b/249988437) - כשמשתמשים ב'חזרה' במערכת אחרי ניווט באמצעות
popUpTo
, המצב שלNavController
יופיע ברשומה הנכונה. (I3a8ec, b/270447657) - עכשיו
FragmentNavigator
יוציא כראוי רשומות כשמפעילים את יצירת הרשומה (pop) של סטאק החזרה באמצעות 'חזרה' במערכת אוpopBackStack()
, ולא משנה אם העסקה משתמשת באפקטים של החלק או לא. (I81bdf) - הוספת קטעים ל-
FragmentNavigator
'sFragmentManager
בלי להשתמש בניווט לא תגרום יותר לקריסה. (b17204, b/274167493)
עדכוני יחסי תלות
- הניווט תלוי עכשיו במחזור חיים
2.6.1
. (586fe7) - הניווט תלוי עכשיו ב-SavedState
1.2.1
. (078e4e) - הניווט תלוי עכשיו ב-ProfileInstaller
1.3.0
. (512f0c)
גרסה 2.6.0-alpha07
8 במרץ 2023
androidx.navigation:navigation-*:2.6.0-alpha07
משוחרר. גרסה 2.6.0-alpha07 מכילה את ההצהרות האלה.
תיקוני באגים
- הוספנו ל-API של
getBackStackEntry
,popBackStack
ו-clearBackStack
, שמקבל מסלולים, תמיכה בתבניות של מסלולים עם ארגומנטים nullable ועם פרמטרים של שאילתה nullable (I22294, b/269302500) - תוקנה בעיה שבה קריאה ל-
clearBackStack()
מ-NavController
לא מנקה את המצב השמור במנהל הקטעים המשויך ל-back stack שנמחק. (Ic1cce, b/271190202) - תוקנה נסיגה בגרסה 2.6.0-alpha06 שגרמה להדגשה של
MenuItem
הלא נכון ב-BottomNavigationView
כשמשתמשים ב'חזרה למערכת' בין כרטיסיות. (I634f6, b/270447657) - תוקנה נסיגה בגרסה 2.6.0-alpha06 שגרמה לכך ש-
NavBackStackEntry
לא הועברו לסטטוס 'המשך' כשנעשה שימוש ב-Animation
. (Ib3589, b/269646882)
גרסה 2.6.0-alpha06
22 בפברואר 2023
androidx.navigation:navigation-*:2.6.0-alpha06
משוחרר. גרסה 2.6.0-alpha06 מכילה את ההצהרות האלה.
תכונות חדשות
- כשמציגים תצוגה מקדימה של רכיב מורכב באמצעות
NavHost
, עכשיו מוצג כברירת מחדלstartDestination
של NavGraph. (I2b89f)
שינויים ב-API
- כל עומסי יתר של
NavController
navigate
מסומנים עכשיו ב-@MainThread
כדי להבטיח שהם יישלחו בקריאה לשרשור הראשי. (I2c0b0, b/263427111)
תיקוני באגים
- תוקנה קריסה שנגרמה בניסיון לנווט בזמן שימוש בניווט דינמי לפי קטעים. (I3ee29, b/268360479)
- תוקן באג שבו ניווט לקטע אחר באמצעות לחצן החזרה לאחור במערכת לא מעדכן את הסרגל התחתון כך שיציג את הפריט הנבחר הנכון (If559f, b/269044426)
בעיות מוכרות
- כשמשתמשים בניווט עם קטעי קוד, מחזור החיים של
NavBackStackEntry
לא מצליח להגיע ל-RESUMED
כשמשתמשים בממשקי ה-API שלAnimation
. (b/269646882) - כשמשתמשים בניווט באמצעות קטעי קוד (fragments) ועוברים בין המסכים באמצעות
BottomNavigation
, אם מנסים לשחזר סטאק אחורה עם כמה רשומות, ה-BottomMenuItem
לא מתעדכן בצורה נכונה. (b/270447657) - כשמשתמשים בניווט עם קטעים, אחרי שחזור המצב, ה-
NavBackStackEntry
Lifecycle
לא מקבלDESTROYED
כשהקטע שלו הואDESTROYED
. (b/270610768)
גרסה 2.6.0-alpha05
8 בפברואר 2023
androidx.navigation:navigation-*:2.6.0-alpha05
משוחרר. גרסה 2.6.0-alpha05 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
תכונות חדשות
- עכשיו אפשר להשתמש ב-
NavController.popBackStack(route)
, ב-NavController.getBackStackEntry(route)
וב-NavController.clearBackStack(route)
כדי לשלוח מסלולים עם ארגומנטים שממולאים חלקית או במלואם. חשוב לזכור שהארגומנטים חייבים להתאים בדיוק לארגומנטים של הרשומה. (Iebd28, Ic678c, I3b37b, b/257514373) FragmentNavigator
משתמש עכשיו בממשקי ה-API של המעבר כשמנווטים ב-NavBackStackEntries
ומציגים אותו בחלון קופץ. המשמעות היא שה-NavBackStackEntry
Lifecycle
יחכה עכשיו עד שהאפקטים המיוחדים של החלק שנכנס והחלק שיוצא יסתיימו, לפני שהוא יעביר את ה-Lifecycle.State
הסופי. (I3cb19, b/238686802)DialogFragmentNavigator
משתמש עכשיו בממשקי ה-API של המעבר כשמנווטים ב-NavBackStackEntries
ומציגים אותו בחלון קופץ. פירוש הדבר הוא ש-NavBackStackEntry
Lifecycle
ימתין עכשיו עד ש-DialogFragment
Lifecycle
יעברו ל-DESTROYED
, ואז יעברו בעצמם ל-DESTROYED
. (I53ee5, b/261213893)
שינויים ב-API
NavigatorState
מספק עכשיו את ה-API שלprepareForTransition
כדי לאפשר ל-Navigator
להעבירNavBackStackEntries
ל-Lifecycle.State
ביניים. (I42c21, b/238686802)- עכשיו אפשר לגשת למחסנית הקודקודית הקודמת שמשויכת ל-
NavGraphNavigator
או ל-ComposeNavigator
דרך נכסbackstack
.ComposeNavigator
חושף עכשיו גם את פונקציית ה-callbackonTransitionComplete()
כדי לסמן כ'הושלמה'NavBackStackEntry
שהפעילה פעולת ניווט או פעולתpopBackStack
. (I02062, I718db, b/257519195)
תיקוני באגים
- מצב הניווט לא יפעל כעת כשמשתמשים בממשקי ה-API של
push/popWithTransition
והרשומה כבר מטופלת. (Iadbfa, b/261213893) - כשמשתמשים ב-
launchSingleTop
עםNavGraph
בתצוגת עץ, כל היעדים, החל מהיעד המקורי ועד ל-startDestination
שלו, יתווספו בצורה תקינה לחלק העליון של סטאק החזרה. (Id4bea, b/253256629) - עכשיו, מערכת הניווט תחליף כראוי את מופע
DialogFragment
כשמנווטים לאותו יעד, כאשר הדגלlaunchSingleTop
מוגדר כ-true. (I45b5a, b/149572817) - Navigation SafeArgs לא יגרום יותר לשגיאת הידור כשמשתמשים בארגומנטים באורך 19 תווים בדיוק. (Id60bc, b/257110095)
גרסה 2.6.0-alpha04
9 בנובמבר 2022
androidx.navigation:navigation-*:2.6.0-alpha04
משוחרר. גרסה 2.6.0-alpha04 מכילה את ההצהרות האלה.
תכונות חדשות
- מעכשיו, תתי-כיתות בהתאמה אישית של
NavType
יכולות לשנות אתserializeAsValue
כדי לסריאליזציה ערך למחרוזת, וכך לאפשר את האנקפסולציה המלאה של הסריאליזציה וההמרה מהסריאליזציה (דרךparseValue
) בכיתהNavType
.StringType
משנה עכשיו את השיטה הזו כדי לקרוא ל-Uri.encode
ב-String
הנתון. (Ie5213, b/247637434) NavigationUI
מספק עכשיו יומנים כשהוא לא מצליח לנווט דרךMenuItem
שנבחר. (I2af5a, b/247730357)
תיקוני באגים
- קישורי עומק לניווט מנותחים עכשיו באופן עצלני במקום במהלך האימות של הגרף, מה שעשוי לשפר את ביצועי האפליקציה בזמן ההפעלה. (Iab0ab)
- תוקנה קריסה שנגרמה כתוצאה מניווט למעלה אחרי קישור עומק ליעד עם ארגומנטים ברירת מחדל של null. (I51c24, b/243183636)
עדכון יחסי תלות
- התמיכה של התכונה 'ניווט' במודולים של פיצ'רים דינמיים תלויה עכשיו בספרייה המפורטת של Play Feature Delivery. (Ib4ddc)
- Navigation Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.3.0. המשמעות היא שהיא תואמת עכשיו רק לגרסאות 7.3.0 ואילך. (I47e49)
גרסה 2.6.0-alpha03
24 באוקטובר 2022
androidx.navigation:navigation-*:2.6.0-alpha03
משוחרר. גרסה 2.6.0-alpha03 מכילה את ההוספות האלה.
תיקוני באגים
- מניווט
2.5.3
:NavHost
לא יגרום יותר ל-NoSuchElementException
כשאין יעד זמין ל-Crossfade
לכתוב. עכשיו הוא פשוט ידלג על היצירה. (Ieb46e, b/253299416) - מניווט
2.5.3
: תוקנה בעיה שבה המצב השמור של Compose (למשל, שימושים ב-rememberSaveable
) לא נשכח והוסר כשיעד הוסר מהמקבץ האחורי. (I64949)
עדכוני יחסי תלות
גרסה 2.6.0-alpha02
5 באוקטובר 2022
androidx.navigation:navigation-*:2.6.0-alpha02
משוחרר. גרסה 2.6.0-alpha02 מכילה את ההצהרות האלה.
שינויים בהתנהגות
- כשמעבירים את המזהה של תרשים ניווט אל
AppBarConfiguration
(למשל דרךMenu
),NavigationUI
מתייחס עכשיו ליעד ההתחלה של תרשים הניווט הזה בלבד בתור יעד ברמה העליונה, במקום לסמן בטעות כל יעד בתרשים בתור יעד ברמה העליונה. ההתנהגות של העברת המזהה של יעד ספציפי לא השתנתה. אותה פונקציונליות זמינה לקוד שלכם באמצעות הפונקציה החדשהisTopLevelDestination
ב-AppBarConfiguration
. (Ie936e, b/238496771)
תיקוני באגים
- הרכיב
navigation:navigation-fragment
תלוי עכשיו בגרסה1.5.2
של ה-Fragment. (I00ba4) - פריט התפריט שנבחר לא יתעדכן יותר כשמנווטים ליעד
FloatingWindow
, כמו תיבת דו-שיח. (I4cde8, b/240308330)
גרסה 2.6.0-alpha01
7 בספטמבר 2022
androidx.navigation:navigation-*:2.6.0-alpha01
משוחרר. גרסה 2.6.0-alpha01 מכילה את ההוספות האלה.
תכונות חדשות
- השילובים של
setupWithNavController
ב-NavigationUI
לעבודה עם שורת האפליקציה העליונה ינתחו עכשיו את הערכים שלR.string
עבור ארגומנטים שלReferenceType
שנמצאים ב-android:label
לערכי המחרוזת שלהם, במקום להפיק את המספר השלם של המשאב שנוצר באופן אוטומטי. (I5f803, b/167959935) - עכשיו יש ב-
NavDeepLink
תמיכה בערכי ברירת מחדל למערכים, שמאפשרת תמיכה בפרמטרים חוזרים של שאילתות שימופו לסוג המערך של הארגומנט.NavType
כולל עכשיו גם שיטת ברירת מחדל שאפשר לשנות כדי לשלב שני ערכים שעברו ניתוח. (Id68c3, b/209977108) - כשמשתמשים במחרוזת המדויקת
${applicationId}
כתובת Placeholder במאפייניםapp:data
ו-app:dataPattern
ברכיב הפעילות בקובץ XML של הניווט,packageName
של ההקשר יאוכלס באופן אוטומטי ב-Placeholder במהלך ההנפה. (Iaabde, b/234223561) - ניסיון ליצור
NavDeepLink
ריק באמצעותnavDeepLink
Kotlin DSL יוביל עכשיו לאזהרת איתור שגיאות בקוד (lint) שמציינת שלקישור עומק צריכים להיות uri, פעולה ו/או mimetype כדי שהוא יהיה תקף. (I08d2f, b/154038883)
שינויים ב-API
- נוספה פונקציית תוסף חדשה
NavDestination
לניתוח תוויות דינמיות עם ארגומנטים בצורתandroid:label="{arg}"
למחרוזת. תמיכה בארגומנטים מסוגReferenceType
על ידי ניתוח הערכים שלR.string
לערכי המחרוזת שלהם. (I07d89, b/236269380)
שינויים בהתנהגות
- עכשיו, הערך של
arguments
ב-NavBackStackEntry והערך שלarguments
שהועברו ל-OnDestinationChangedListener
הם רק עותק של הארגומנטים הבלתי משתנים שנוצרו כשנווטתם ליעד. המשמעות היא ששינויים שתבצעו בחבילות האלה לא ישתקפו בגישה הבאה ל-arguments
או למכונותOnDestinationChangedListener
אחרות. (I676f5)
תיקוני באגים
- מניווט
2.5.2
: ניווט דינמי מנסה עכשיו להתקין כראוי יעדים של פעילות ממודולים אחרים לפני שמנווטים אליהם. (Ia2c16, b/240292838) - מניווט
2.5.2
: מערכת הניווט תחליף עכשיו כראוי את מופע הפלח כשמנווטים לאותו יעד ומגדירים את הדגלlaunchSingleTop
כ-true. (I5a2f1, b/237374580) - מניווט
2.5.2
: תוקן הבעיהIllegalStateException
שנגרמה כתוצאה מהניווט לתרשים עם עץ כפול שמשתף הורה עם יעד חדש שנפתח. (I9f7cb, b/243778589)
גרסה 2.5
גרסה 2.5.3
24 באוקטובר 2022
androidx.navigation:navigation-*:2.5.3
משוחרר. גרסה 2.5.3 מכילה את ההצהרות האלה.
תיקוני באגים
NavHost
לא יגרום יותר ל-NoSuchElementException
כשאין יעד זמין ל-Crossfade
לכתיבה. עכשיו הוא פשוט ידלג על היצירה. (Ieb46e, b/253299416)- תוקנה בעיה שבה מצב כתיבה שנשמר (למשל, שימושים ב-
rememberSaveable
) לא נשכח והוסר כשיעד הוסר מהמקבץ האחורי. (I64949)
גרסה 2.5.2
7 בספטמבר 2022
androidx.navigation:navigation-*:2.5.2
משוחרר. גרסה 2.5.2 כוללת את השמירות האלה.
תיקוני באגים
- התכונה 'ניווט דינמי' מנסה עכשיו להתקין כראוי יעדים של פעילויות ממודולים אחרים לפני שהיא מנווטת אליהם. (Ia2c16, b/240292838)
- עכשיו, מערכת הניווט תחליף כראוי את מופע ה-Fragment כשמנווטים לאותו יעד ומגדירים את הדגל
launchSingleTop
לערך true. (I5a2f1, b/237374580) - תוקנה השגיאה
IllegalStateException
שנגרמה כתוצאה מניווט לתרשים עם עץ כפול שמשתף הורה עם יעד חדש שנפתח. (I9f7cb, b/243778589)
עדכון יחסי תלות
- הניווט
2.5.2
תלוי עכשיו בקטע1.5.2
. (aosp/2178734)
גרסה 2.5.1
27 ביולי 2022
androidx.navigation:navigation-*:2.5.1
משוחרר. גרסה 2.5.1 כוללת את ההוספות האלה.
תיקוני באגים
Navigation Safe Args
לא יגרום יותר לאזהרות על הוצאה משימוש בכיתות שנוצרו כשמשתמשים בסוגי ארגומנטים מותאמים אישית שנשמרים ב-Bundle
. (Id86ed, b/237725966)
עדכוני יחסי תלות
- ספריית הניווט תלויה עכשיו ב-Lifecycle
2.5.1
. (Ib4451) - ספריית הניווט תלויה עכשיו בפעילות
1.5.1
. (I3efe8) - ספריית הניווט תלויה עכשיו בקטע
1.5.1
. (I56177)
גרסה 2.5.0
29 ביוני 2022
androidx.navigation:navigation-*:2.5.0
משוחרר. גרסה 2.5.0 כוללת את השמירות האלה.
שינויים חשובים מאז גרסה 2.4.0
- שילוב עם CreationExtras – עכשיו יש ל-
Navigation
אפשרות לספקViewModelProvider.Factory
ללא מצב (stateless) דרךCreationExtras
של2.5.0
לניהול מחזור חיים.
Navigation SafeArgs
Navigation Safe Args
שדרג את התלות שלAndroid Gradle Plugin
כך שתסתמך על7.0.4
, והפסיק את התאימות לגרסאות AGP שקדמו ל-7.0
.- נוספה תמיכה במאפיין build.gradle של מרחב השמות, לשימוש במקום applicationId.
שינויים אחרים
- ממשק ה-API של
visibleEntries
כבר לא ניסיוני, והוא מספק פונקציה לאחזור כל הרשומות שהיעדים שלהן גלויים כרגע לפיNavController
.
גרסה 2.5.0-rc02
15 ביוני 2022
androidx.navigation:navigation-*:2.5.0-rc02
משוחרר. גרסה 2.5.0-rc02 כוללת את ההוספות האלה.
תיקוני באגים
- תוקן קריסה שנגרמה בגלל מעבר מהיר בין יעדים בתחתית המסך כשמשתמשים בסמל הכתיבה
NavHost
בתפריט הניווט. (I3979a, b/234054916) Navigation SafeArgs
לא יתרסק יותר כשמשתמשים ב-applicationIdSuffix
ובמרחב שמות בליapplicationId
, או כשה-applicationId
והמרחב השמות שונים. (I754b1, b/233119646)- ל-
NavArgument
יש עכשיו פונקצייתtoString()
בהתאמה אישית כדי להציג את הערכים הפנימיים של הארגומנט. (I900a8)
גרסה 2.5.0-rc01
11 במאי 2022
androidx.navigation:navigation-*:2.5.0-rc01
משוחרר. גרסה 2.5.0-rc01 כוללת את ההצהרות האלה.
תכונות חדשות
- הוספנו כלל חדש לאיתור שגיאות בקוד כדי להזהיר מפני הצבת רכיבי
<deeplink>
בתוך רכיבי<activity>
בקובץnavigation.xml
.(Ic15a5, b/178403185)
תיקוני באגים
- היקפי ה-Composable ב-
NavHost
וב-DialogHost
נהרסים עכשיו בסדר הצפוי, כלומר ה-Composable הפנימיים נהרסים לפני ה-Composable החיצוניים. (I157e6) - עכשיו, ב-Navigation SafeArgs נעשה שימוש ב-
PathSensitivity.RELATIVE
ב-ArgumentsGenerationTask
כדי לאפשר העברה של מטמון. המשמעות היא שאפשר להשתמש שוב ברשומה במטמון מ-build ב-CI ל-build מקומי. (I5f67c, b/173420454) - כלל האיתור של שגיאות בקוד (lint)
UnrememberedGetBackStackEntryDetector
עודכן כדי לוודא שהקריאה ל-remember
שמקיפה את הקריאה ל-getBackStackEntry()
מעבירה גם אובייקטNavBackStackEntry
כמפתח.(Ib7081, b/227382831)
גרסה 2.5.0-beta01
20 באפריל 2022
androidx.navigation:navigation-*:2.5.0-beta01
משוחרר. גרסה 2.5.0-beta01 כוללת את ההצהרות האלה.
תיקוני באגים
DialogNavigator
משתמש עכשיו ב-popWithTransition
כשמפעיל קריאה ל-dismiss()
. התיקון הזה מתקן מצב מרוץ (race condition) כשמשתמשים ב-ViewModel
בתוך יעדdialog
, שגורם ל-IllegalStateException
כשסוגרים את תיבת הדו-שיח באמצעות לחצן החזרה למערכת או בהקשה מחוץ לתיבת הדו-שיח כדי לצאת. (Id7376, b/226552301)
עדכוני יחסי תלות
- הניווט תלוי עכשיו במחזור חיים
2.5.0-beta01
, ותיקוןIllegalStateException
כשמקפליםNavHost
אחד בתוךNavHost
אחר בכרטיסיית ניווט תחתונה לא ראשית כשמשתמשים בכמה סטאקים של חזרה אחורה.
גרסה 2.5.0-alpha04
6 באפריל 2022
androidx.navigation:navigation-*:2.5.0-alpha04
משוחרר. גרסה 2.5.0-alpha04 מכילה את ההצהרות האלה.
שינויים ב-API
visibleEntries
כבר לא בגרסת ניסיון. (I4829f, b/225394514)
תיקוני באגים
- עכשיו, NavHost תלוי ב-
visibleEntries
מה-NavController
כדי לקבוע אילו רשומות לכתוב. כלומר, כשמשתמשים ב-NavHost בתצוגת עץ, ה-NavHost
הפנימי אמור להיעלם עכשיו בצורה נכונה. (I4ba2b, b/225394514) - השדה
visibleEntries
StateFlow
ש-NavController
מספק מבוסס עכשיו על מצב מחזור החיים המקסימלי של הרשומה, במקום על מצב מחזור החיים הנוכחי. המשמעות היא שגם אם מחזור החיים של המארח שלnavController
יהיה נמוך מ-STARTED, רשימת הרשומות הגלויה לא תשתנה. (I9e2a8, b/225394514) - עכשיו יש תמיכה ב-
SavedStateViewFactory
בשימוש ב-CreationExtras
גם אם הוא הופעל באמצעותSavedStateRegistryOwner
. אם מציינים פרמטרים נוספים, המערכת תתעלם מהארגומנטים שהועברו ל-init. (I6c43b, b/224844583) - עכשיו אפשר לנתח את
NavDeepLink
עם פרמטר שאילתה אחד ללא ערך. (I0efe8, b/148905489) - מחרוזות ריקות נחשבות עכשיו לארגומנטים תקינים בקישורי עומק. (I70a0d, b/217399862)
Navigation Safe Args
לא יתקרוס יותר כשמשתמשים במרחבי שמות ואיןAndroidManifest.xml
. (I17ccf, b/227229815)
גרסה 2.5.0-alpha03
23 בפברואר 2022
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
כדי ליצור ViewModels. (I69161, b/217617710)- מעכשיו, ב-Navigation Safe Args אפשר להשתמש במרחב השמות שמוגדר ב-
build.gradle
במקום בחבילה ב-AndroidManifest. (I659ef, b/217414933)
גרסה 2.5.0-alpha02
9 בפברואר 2022
androidx.navigation:navigation-*:2.5.0-alpha02
משוחרר. גרסה 2.5.0-alpha02 מכילה את ההצהרות האלה.
תיקוני באגים
- מNavigation
2.4.1
: עכשיו ה-NavHostFragment
מגדיר בצורה נכונה את ה-OnBackPressedDispatcher
כשמשתמשים ב-viewbinding עם תרשימים בתצוגת עץ. (Ifbb51, b/214577959) - מניווט
2.4.1
: כשמקשרים לעומק דרך כמה רכיביNavGraph
בתצוגת עץ, עכשיו סטאק החזרה יכלול כראוי יעדים ביניים של התחלה. (I504c0, b/214383060)
גרסה 2.5.0-alpha01
26 בינואר 2022
androidx.navigation:navigation-*:2.5.0-alpha01
משוחרר. גרסה 2.5.0-alpha01 מכילה את ההצהרות האלה.
תכונות חדשות
NavBackStackEntry
משתלב עכשיו עם ViewModel CreationExtras, שהוצג כחלק מ-Lifecycle2.5.0-alpha01
. (Ib9fe2, b/207012490)
תיקוני באגים
- תוקנה בעיה שבה הגישה ל-
ViewModel
שנוצר באמצעותby navGraphViewModels()
מ-onCreate()
של Fragment נכשלה עםIllegalStateException
. (I8a14d) NavDeepLink
s לא יבצע יותר פענוח של ארגומנטים פעמיים ללא צורך, כלומר הארגומנטים המתאימים מועברים עכשיו ליעד הסופי. (I31b0a, b/210711399)
Safe Args
- Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.0.4. המשמעות היא ש-Navigation Safe Args לא יהיה תואם יותר לגרסאות Android Studio שקודמות לגרסה 7.0, אבל הוא תואם עכשיו ל-Android Gradle Plugin מגרסה 7.1.0 ואילך. (I41c88, b/213086135, b/207670704)
גרסה 2.4.2
גרסה 2.4.2
6 באפריל 2022
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
:Navigation Safe Args
לא יתקרוס יותר כשמשתמשים במרחבי שמות ואיןAndroidManifest.xml
. (I17ccf, b/227229815) - הוספה לאחור מ-Navigation
2.5.0-alpha04
: מחרוזות ריקות נחשבות עכשיו לארגומנטים תקינים בקישורי עומק. (I70a0d, b/217399862)
גרסה 2.4.1
גרסה 2.4.1
9 בפברואר 2022
androidx.navigation:navigation-*:2.4.1
משוחרר. גרסה 2.4.1 מכילה את ההוספות האלה.
תיקוני באגים
- עכשיו, כשמשתמשים ב-viewbinding עם תרשימים בתצוגת עץ, ה-
NavHostFragment
מגדיר את ה-OnBackPressedDispatcher
בצורה נכונה. (Ifbb51, b/214577959) - כשמשתמשים בקישורי עומק דרך כמה
NavGraph
בתצוגת עץ, עכשיו יעדים ביניים של נקודות התחלה ייכללו כראוי בסטאק העורפי. (I504c0, b/214383060) - הוטמעו גרסאות קודמות מ-Navigation
2.5.0-alpha01
: תוקנה בעיה שבה הגישה ל-ViewModel שנוצר באמצעותby navGraphViewModels()
מ-onCreate()
של Fragment נכשלה עםIllegalStateException
. (I8a14d) - הוטמעו מ-Navigation
2.5.0-alpha01
:NavDeepLink
s כבר לא מפענחים את הארגומנטים פעמיים ללא צורך, כלומר הארגומנטים שפורקו כראוי מועברים עכשיו ליעד הסופי. (I31b0a, b/210711399) - הוטמע מ-Navigation
2.5.0-alpha01
: Safe Args תלוי עכשיו ב-Android Gradle Plugin בגרסה 7.0.4. פירוש הדבר הוא ש-Navigation Safe Args לא יהיה תואם יותר לגרסאות Android Studio שקודמות לגרסה 7.0, אבל הוא תואם עכשיו ל-Android Gradle Plugin מגרסה 7.1.0 ואילך. (I41c88, b/213086135, b/207670704)
גרסה
גרסה
26 בינואר 2022
androidx.navigation:navigation-*:2.4.0
משוחרר. גרסה 2.4.0 כוללת את השמירות האלה.
שינויים חשובים מאז גרסה 2.3.0
- כל פריטי המידע שנוצרו בתהליך הפיתוח (artifacts) של Navigation נכתבו מחדש ב-Kotlin. בעקבות זאת, חל שיפור ביכולת של כיתות להחזיק ערך null באמצעות גנריקים (כמו תת-כיתות של
NavType
). כל פונקציות ההרחבה של Kotlin שהיו חלק מהארטיפקטים של-ktx
הועברו לארטיפקטים הראשיים שלהן. הארטיפקטים של-ktx
ימשיכו להתפרסם, אבל הם יהיו ריקים לחלוטין. - הארטיפקט
navigation-fragment
מכיל עכשיו הטמעה מוכנה מראש של פריסה עם שתי חלוניות באמצעותAbstractListDetailFragment
החדש. בקטע הזה נעשה שימוש ב-SlidingPaneLayout
כדי לנהל חלונית רשימה (שסופקת על ידי תת-הסוג) וחלונית פרטים, שבה נעשה שימוש ב-NavHostFragment
כהטמעה שלה, כפי שמוצג בהטמעת הדוגמה. - השיטה
currentBackStackEntryAsFlow()
ב-NavController
מספקתFlow
שמפיק אירוע בכל פעם ש-NavBackStackEntry
הנוכחי משתנה. אפשר להשתמש בתהליך הזה כחלופה לניהולOnDestinationChangedListener
באופן ידני. - עכשיו יש ב-NavController אפשרות לאחזר רשימה של כל המופעים הגלויים של
NavBackStackEntry
כ-StateFlow
דרך המאפיין הניסיוניvisibleEntries
. - עכשיו אפשר להרחיב את הכיתה
NavType
כדי ליצור NavTypes מותאמים אישית. יש תמיכה בסוגי נתונים מותאמים אישית רק כשיוצרים את תרשים הניווט באופן פרוגרמטי, למשל באמצעות Navigation Graph Kotlin DSL. רכיב הניווט מספק עכשיו ממשקי API של
findStartDestination()
ו-getHierarchy()
שאפשר להשתמש בהם כדי להטמיע ממשק משתמש מותאם אישית של Navigation.findStartDestination()
היא פונקציית תוסף ב-NavGraph
שתאתר את יעד ההתחלה בפועל שיוצג כשמנווטים לתרשים, גם אם ה-startDestination
הוא עצמוNavGraph
בתצוגת עץ.getHierarchy()
היא פונקציה ב-NavDestination
שאפשר להשתמש בה כדי לוודא אם יעד נתון נמצא בהיררכיה של יעד אחר.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
שיטות
NavigationUI
שהשתמשו ב-BottomNavigationView
עודכנו כך שישתמשו במקום זאת בסיווג ההורה שלהן,NavigationBarView
, שהוצג בחומר1.4.0
. כך אפשר להשתמש בשיטות האלה עםNavigationRailView
.כשמנפחים רכיב
<action>
באמצעות XML, מאפייני האנימציה יכולים להשתמש במאפיינים שחולצו מהעיצוב באמצעות התחבירapp:enterAnim="?attr/transitionEnter"
.Safe Args יוצר עכשיו שיטה
fromSavedStateHandle()
לכל כיתהNavArgs
. (#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) }
מסלולי ניווט ו-DSL של Kotlin
בגרסאות קודמות של 'ניווט', לכל יעד היה מזהה מספר שלם קבוע שאפשר לזהות אותו באופן ייחודי מבין היעדים האחרים באותו רמה, ולאפשר לכם navigate()
ליעד הזה באופן ישיר או באמצעות פעולה. המערכת הזו עדיין תקפה ומועילה, במיוחד במקרים שבהם מגדירים את תרשים הניווט ב-XML ואפשר להשתמש בערכי קבועים מסוג R.id
שנוצרו באופן אוטומטי או ב-Safe Args (שנעשה בהם שימוש בערכי הקבועים האלה כדי ליצור קוד בזמן ה-build), אבל המערכת הזו של מספרים שלמים ייחודיים לא תיעדה את המשמעות הסמנטית ואת היכולת לבטא את הצורך לתמוך בתרשים דינמי לחלוטין שנוצר באופן פרוגרמטי בזמן הריצה באמצעות Navigation Kotlin DSL.
בגרסה הזו נוספה אפשרות חדשה לזיהוי ייחודי של יעד בתרשים ניווט לפי הנתיב שלו. נתיב הוא String
שמגדיר את הנתיב הייחודי ליעד. כל השיטות של Kotlin DSL שדרשו מזהה יעד הוצאו משימוש והוחלפו ב-API מקביל שדורש מסלול.
צריך להתייחס לכל מסלול כחלק 'path' של Uri
שמגדיר את היעד הזה, למשל: home
, profile/{userId}
, profile/{userId}/friends
וכו'. כשהזהות של יעד משויכת לחלק ספציפי של תוכן, הארגומנטים הדינמיים האלה צריכים להיות חלק מהמסלול, בהתאם לאותם כללים שחלים על קישורי עומק מרומזים.
לכל ממשקי ה-API של NavController
, שבעבר קיבלו רק מזהה, יש עכשיו עומס יתר שמקבל מסלול String
. כולל navigate()
, popBackStack()
, popUpTo()
ו-getBackStackEntry()
.
לכך היו השלכות מסוימות על ממשקי ה-API:
- המאפיין
popUpTo
ב-Kotlin DSL יצא משימוש לטובתpopUpToId
. - ממשק ה-API
getStartDestination()
הוצא משימוש והוחלף על ידיgetStartDestinationId()
.
בניגוד לניווט לפי מזהה, ניווט לפי מסלול פועל לפי אותם כללים כמו קישורי עומק מרומזים, כלומר אפשר לנווט ישירות לכל יעד בכל תרשים בתצוגת עץ. כך אפשר להשתמש בנתיבים האלה בפרויקטים עם כמה מודולים בלי להוסיף באופן מפורש קישור עומק גלוי מבחוץ לכל יעד.
כתיבה מהירה בזמן ניווט
הארטיפקט navigation-compose
מספק שילוב בין רכיב הניווט לבין Jetpack פיתוח נייטיב. הוא משתמש בפונקציות @Composable
בתור היעדים באפליקציה.
בגרסה הזו יש:
- רכיב
NavHost
שאפשר להרכיב, שמאפשר ליצור את תרשים הניווט באמצעות DSL של Kotlin, באמצעות יעדים מסוגcomposable
ו-dialog
, וגם תמיכה ב-Navigators אופציונליים כמו אלה מ-Accompanist Navigation Material. - תמיכה חובה במעבר חלק בין יעדים. אפשר להשתמש באנימציית ניווט של כלי נלווה כדי לשלוט במעברים של הכניסה והיציאה באמצעות ממשקי API ניסיוניים של Compose.
- הגדרת ההיקף של
Lifecycle
לכל יעד שאפשר ליצור ממנו קומפוזיציה. כל יעד מגיע למצבRESUMED
רק כשהטרנזיציות של הכניסה מסתיימות, ויורד מיד ל-STARTED
כשהטרנזיציות של היציאה מתחילות. כך תוכלו להימנע מכל הבעיות שקשורות ל-IllegalStateException
ולמגע בכמה נקודות על ידי הפעלת קריאה ל-navigate
רק כשה-Lifecycle
הואRESUMED
. - הגדרת היקף של
ViewModel
(דרך ה-APIviewModel()
של Lifecycle ViewModel Compose2.4.0
אוhiltViewModel()
של Hilt Navigation Compose1.0.0
ברמת היעד, שמספק היקף ששרוי במצב תקין גם אחרי שינויים בהגדרות וגם כשהוא נמצא בסטאק האחורי (כשתוכן Composable מסוים מושמד בדרך אחרת), וכן אות ב-onCleared()
של ViewModel שמציין את ההשמדה הקבועה והניקוי של המצב המשויך ל-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
והשילוב ברכיבי <action>
ב-XML של גרף הניווט הורחבו כדי לתמוך בשמירה ובשחזור של סטאק החזרה אחורה.
כחלק מהשינוי הזה, השיטות NavigationUI
של onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
ו-NavigationView.setupWithNavController()
שומרות ומשחזרות באופן אוטומטי את המצב של יעדים שהוצאו מהמקבץ, ומאפשרות תמיכה במספר מקבצים של 'חזרה אחורה' בלי שינויים בקוד. כשמשתמשים בניווט עם קטעי קוד, זו הדרך המומלצת לשילוב עם כמה סטאקים של היסטוריית חזרה.
ממשקי ה-API הבסיסיים לשמירה ולשחזור המצב גלויים במספר פלטפורמות:
ב-Navigation XML, הרכיב
<action>
יכול עכשיו להשתמש במאפיינים הבוליאניים שלapp:popUpToSaveState
ו-app:restoreState
כדי לשמור את המצב של כל יעד שמוצג באמצעותapp:popUpTo
ולשחזר את המצב המשויך ליעד שהוענק כ-app:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
ב-
navOptions
Kotlin DSL, אפשר להוסיף את הנכס הבוליאניrestoreState
ואת הנכס הבוליאניsaveState
ל-popUpTo
builder:// 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
דרךNavOptions.Builder
, אפשר להשתמש ב-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
ברמת יעד הניווט. ממשקי ה-API של Navigator
עודכנו כדי לאפשר לכל Navigator
לתמוך בשמירה ובשחזור של המצב שלו.
שינויים בהתנהגות
NavDeepLinkBuilder
מוסיף עכשיו אתPendingIntent.FLAG_IMMUTABLE
ל-PendingIntent
שמוחזר על ידיcreatePendingIntent()
, כדי לוודא שממשק ה-API הזה פועל כצפוי כשמטרגטים ל-Android 12.- הניווט תלוי עכשיו ב-Lifecycle
2.3.1
, ומסמן אתsetGraph()
,popBackStack()
,navigateUp()
ו-navigate()
, השיטות שמעדכנות אתNavBackStackEntry
Lifecycle
, בתור@MainThread
. כך הניווט תואם לאכיפה של פעילות השרשור הראשי שהוצגה ב-Lifecycle2.3.0
. - קישורי עומק מוודאים עכשיו שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) נמצאים ב-
Uri
. - ארגומנטים שעברו ניתוח של
NavDeepLink
נחשבים עכשיו כמפריד בין קטעי הנתיב, בדיוק כמו סימני השאלה, כדי למנוע מצב שבו ארגומנט חוצה את סימן הפלוס. - כשיוצרים פעולות, קוד Kotlin שנוצר מ-Safe Args מציב עכשיו ארגומנטים ללא ערכים שמוגדרים כברירת מחדל לפני ארגומנטים עם ערכים שמוגדרים כברירת מחדל כפרמטרים.
- כשיוצרים ארגומנטים, Safe Args מעביר עכשיו פרמטרים ללא ערכי ברירת מחדל לפני פרמטרים עם ערכי ברירת מחדל.
- Safe-Args תלוי עכשיו בפלאגין של Android Gradle מגרסה 4.2.0. המשמעות היא שאמורה להפסיק להופיע האזהרה לגבי השימוש ב-
applicationIdTextResource
.
בעיות מוכרות
- תוקנה ב-Navigation
2.5.0-alpha01
: הגישה ל-ViewModel
שנוצר באמצעותby navGraphViewModels()
מ-onCreate()
של Fragment תיכשל עםIllegalStateException
. (b/213504272) - תוקנה ב-Navigation
2.5.0-alpha01
: Safe Args 2.4.0 לא תואם לפלאגין Android Gradle מגרסה 7.1.0 ואילך. (b/213086135) - קישורי עומק עם כמה תרשימי ניווט בתצוגת עץ לא יוצרים בצורה נכונה את סטאק החזרה המלא. (b/214383060)
גרסה 2.4.0-rc01
15 בדצמבר 2021
androidx.navigation:navigation-*:2.4.0-rc01
משוחרר. גרסה 2.4.0-rc01 כוללת את ההצהרות האלה.
שינויים בהתנהגות
- עכשיו, כש
NavDeepLink
מנתח ארגומנטים, הוא מתייחס לסימנים של לירה שטרלינג באותו אופן שבו הוא מתייחס לסימנים שאלה כמפרידים בין ארגומנטים. (I21309, b/180042703)
תיקוני באגים
- קישורי עומק לא יתעלמו יותר מארגומנטים עם ערכים זהים לשם של placeholder. (If8017, b/207389470)
NavController
לא יתקרס יותר כשפותחים יעד בתצוגת קופץ באמצעות מעברים אחרי ש-NavController
שוחזר. (I0f7c9, b/205021623)- הודעת השגיאה שמופיעה כשמשתמשים ב-
startDestination
לא תקין תהיה עכשיו ברירת המחדל למסלול של יעד ההתחלה, אם יש כזה. (I86b9d, b/208041894)
תיקוני באגים ב-Navigation Compose
- תוקנה קריסה פוטנציאלית שנגרמה כתוצאה ממעבר מהיר בין יעד ההתחלה ליעד אחר באמצעות פריטים בתפריט הניווט התחתון. (Ic8976, b/208887901)
- עכשיו יעד הדו-שיח משוחזר כראוי בחלק העליון של המסך אחרי שינויים בהגדרות או סגירת תהליך. (I4c0dc, b/207386169)
- תוקנה בעיה שבה ניסיון לאחזר
ViewModel
מ-NavBackStackEntry
של תיבת דו-שיח נכשל כשתיבת הדו-שיח נסגרה. (I6b96d, b/206465487) - תוקנה בעיה בשימוש ביעדי
activity
עםNavHost
של Navigation Compose, שגרמה ליצירת קומפוזיציות מחדש ללא הגבלה. (I8f64c) - תוקן דליף ב-Navigation Compose, שבו המערכת שמרה על הפניה לפעילות הישנה אחרי שינוי בתצורה או סיום תהליך. (I4efcb, b/204905432)
תיקוני באגים ב-Safe Args
SafeArgs
לא קורס יותר כשמנסים לשחזר מערכי parcelable מותאמים אישית אחרי סיום התהליך. (I618e8, b/207315994)- תוקן באג ב-safe args שלא איפשר למערכים בוליאניים לקבל ערך
null
. (I8c396, b/174787525)
גרסה 2.4.0-beta02
3 בנובמבר 2021
androidx.navigation:navigation-*:2.4.0-beta02
משוחרר. גרסה 2.4.0-beta02 כוללת את ההתחייבויות האלה.
שינויים ב-API
- הטיפול בקישורים עמוקים, מפורשים וביניים, מוסיף עכשיו באופן אוטומטי את הדגל
saveState
כשמנווטים לתרשים אחר. כך מובטח שקוד כמוNavigationUI.setupWithNavController
וקוד שמשתמש במספר סטאקים חוזרים יפעל כצפוי. (Ic8807)
שינויים בהתנהגות
- עכשיו, דפוסי קישורי העומק מקובצים באופן עצל ב-NavDeepLink במקום במהלך ההנפקה. הפעולה הזו אמורה לשפר את זמן ההנפקה של תרשימי הניווט שכוללים קישורי עומק. (b8d257, b/184149935)
תיקוני באגים
- תוקנה בעיה שבה רשומות NavBackStackEntries נדחפו למטה אל
Lifecycle.State.CREATED
אחרי המעבר אלLifecycle.State.STARTED
, כאשר ה-NavHost
נוסף ישירות ל-setContent()
של הפעילות. (Ia5ac1, b/203536683) - תוקנה בעיה של תנאי מרוץ (race condition) שבה הוצאה של יעד
DialogFragment
מהמקבץ האחורי לפני שהתיבת הדו-שיח הוצגה בפועל לא סגרה את תיבת הדו-שיח בפועל, וכתוצאה מכך התרחש קריסה כשהמשתמש סגר את תיבת הדו-שיח השגויה באופן ידני. (I687e5) - תוקנה בעיה שבה ה-API של
onNavDestinationSelected
ב-NavigationUI
החזיר את הערךtrue
גם אם לא ביצעתםnavigate()
לתרשים הניווט הזה בפועל. עכשיו הוא משתמש באותה לוגיקה שבהsetupWithNavController
משתמש באופן פנימי כדי לבחור רק אתMenuItem
שמשויך ליעד הנוכחי באמצעותhierarchy
של היעד. (I2b053)
גרסה 2.4.0-beta01
27 באוקטובר 2021
androidx.navigation:navigation-*:2.4.0-beta01
משוחרר. גרסה 2.4.0-beta01 מכילה את ההצהרות האלה.
תכונות חדשות
- עכשיו אפשר להשתמש ב-
by navGraphViewModel
עם נתיב כחלופה לשימוש במזהה, כדי לספק תמיכה טובה יותר בשימוש ב-Navigation Kotlin DSL עם 'קטעים'. (I901e3, b/201446416)
שינויים ב-API
- ממשק ה-API של
visibleEntries
הוא עכשיו ניסיוני. (I93f6f)
תיקוני באגים
- מודלים של תצוגת מידע לא יימחקו יותר כשמעבר בין מסכים מופרע על ידי ניווט הלוך ושוב בין אותם מסכים (Id52d8, b/200817333)
- לא נדרשת יותר ערך ברירת מחדל לארגומנטים
NavDeepLink
שניתנים לאפס כשמוסיפים קישורי עומק ל-NavDestination
. (I5aad4, b/201320030) - עכשיו, רכיבי NavBackStackEntries עם Lifecycles שונים לא נחשבים לזהים. המשמעות היא ש-NavHost ירכיב מחדש בצורה תקינה את כל היעדים במהלך ניווט עם singleTop ובמהלך בחירה מחדש של פריטים בתפריט התחתון. (I1b351, b/196997433)
- תוקנה בעיה ב-
AbstractListDetailFragment
שגרמה לטיפול שגוי או להתעלמות מהמאפייניםlayout_width
ו-layout_weight
בחלונית הרשימה שמוחזרת על ידיonCreateListPaneView()
. (f5fbf3) - המצב החזותי של יעדי התיבת הדו-שיח מסתנכרן עכשיו בצורה נכונה עם המצב של
DialogFragmentNavigator
. המשמעות היא שקריאה ידנית ל-APIdismiss()
האסינכרוני שלDialogFragment
מנקה עכשיו בצורה תקינה את כל היעדים של תיבת הדו-שיח שמעל תיבת הדו-שיח שנסגרה. האפשרות הזו לא משפיעה על מקרים שבהם משתמשים ב-popUpTo
או ב-popBackStack()
כדי לסגור את תיבת הדו-שיח. (I77ba2) AbstractAppBarOnDestinationChangedListener
כולל עכשיו הודעות שגיאה ברורות יותר לגביonDestinationChanged()
. (Ie742d)
גרסה 2.4.0-alpha10
29 בספטמבר 2021
androidx.navigation:navigation-*:2.4.0-alpha10
משוחרר. גרסה 2.4.0-alpha10 מכילה את ההצהרות האלה.
תכונות חדשות
- NavController מציע עכשיו את היכולת לאחזר רשימה של כל המופעים הגלויים של
NavBackStackEntry
דרך StateFlow שלvisibleEntries
(Ia964e) rememberNavController()
מקבלת עכשיו קבוצה אופציונלית של מכונותNavigator
שיתווספו ל-NavController
המוחזר כדי לתמוך טוב יותר בנווטים אופציונליים, כמו אלה מ-Accompanist Navigation Material. (I4619e)
תיקוני באגים
- התכונה 'ניווט דינמי' לא תקרוס יותר כשהפעילות תיווצר מחדש. (Ifa6a3, b/197942869)
- תוקנה בעיה בלחצן החזרה אחורה במערכת, שמתרחשת רק אחרי חזרה לאחור ליעד שאפשר ליצור ממנו קובץ שמורכב מכמה רכיבים, שמכיל
NavHost
. (3ed148, b/195668143) - עכשיו, SafeArgs יוצר את הארגומנטים של
fromBundle()
ו-fromSavedStateHandle()
בסדר הפרמטרים הנכון. (I824a8, b/200059831)
גרסה 2.4.0-alpha09
15 בספטמבר 2021
androidx.navigation:navigation-*:2.4.0-alpha09
משוחרר. גרסה 2.4.0-alpha09 מכילה את ההצהרות האלה.
תכונות חדשות
- עכשיו אפשר להשתמש ב-method
clearBackStack()
כדי לנקות כל מצב ששמור באמצעותpopBackStack()
אוpopUpToSaveState
. (I80a0f) - עכשיו אפשר להעביר רשימה של ארגומנטים ו/או קישורים עומק ל-builder של תרשים הניווט המורכב, והם יתווספו באופן אוטומטי לתרשים שנוצר. (I8a470, b/182545357)
שינויים ב-API
- הפונקציה
navArgument
של Kotlin DSL היא עכשיו חלק מ-navigation-common
במקום מ-navigation-compose
. כדי להמשיך להשתמש בפונקציה הזו, תצטרכו לעדכן את הייבוא. (I1d095)
שינויים בהתנהגות
- כשיוצרים ארגומנטים, Safe Args מעביר עכשיו פרמטרים ללא ערכי ברירת מחדל לפני פרמטרים עם ערכי ברירת מחדל. (I89709, b/198493585)
תיקוני באגים
- כשמשתמשים ב-Navigation Compose, ה-NavGraphs יהיו
DESTROYED
רק אחרי שכל הצאצאים שלהם יהיוDESTROYED
. (I86552, b/198741720) - לא צריך יותר לציין ערך ברירת מחדל לארגומנטים
NavDeepLink
שניתנים לשינוי. (Ia14ef, b/198689811) - קריאה ל-
setGraph()
עם תרשים חדש תגרום עכשיו גם לניקוי של כל ערימות ה-back stack שנשמרו, בנוסף להתנהגות הקודמת של הוצאה מהמצב המאוחסן של ערימת ה-back stack. (I97f96) - תוקנה בעיה שבה מכונות
OnDestinationChangedListener
ו-currentBackStackEntryFlow
לא קיבלו התראות כשמשתמשים ב-launchSingleTop
. (Iaaebc)
עדכוני יחסי תלות
- התכונה Navigation Compose תלויה עכשיו ב-Activity Compose 1.3.1. (I05829)
- Navigation Compose תלוי עכשיו ב-Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
גרסה 2.4.0-alpha08
1 בספטמבר 2021
androidx.navigation:navigation-*:2.4.0-alpha08
משוחרר. גרסה 2.4.0-alpha08 כוללת את ההצהרות האלה.
תכונות חדשות
- עכשיו אפשר להרחיב את הכיתה
NavType
כדי ליצור NavTypes מותאמים אישית. יש תמיכה בסוגי נתונים מותאמים אישית רק כשיוצרים את תרשים הניווט באופן פרוגרמטי, למשל באמצעות Navigation Graph Kotlin DSL. (I78440, b/196871885)
שינויים בהתנהגות
- כשיוצרים פעולות, קוד Kotlin שנוצר מ-Safe Args מציב עכשיו ארגומנטים ללא ערכים שמוגדרים כברירת מחדל לפני ארגומנטים עם ערכים שמוגדרים כברירת מחדל כפרמטרים. (Idb697, b/188855904)
- קישורי עומק מוודאים עכשיו שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) נמצאים ב-
Uri
. (#204, b/185527157)
תיקוני באגים
- שימוש ב-
getBackStackEntry
וב-previousBackStackEntry
בתוך composable(), בשילוב עםremember()
, לא יגרום יותר לחריגה במקרה שאין יעד ב-back stack. (I75138, b/194313238) - עכשיו, כשמשנים את הארגומנטים של ה-stack לאחור ומשתמשים ב-
launchSingleTop=true
, ה-Navigation Compose יוצר מחדש את הקוד בצורה תקינה. (Iebd69, b/186392337) - לא תהיה יותר
ArrayIndexOutOfBoundsException
כשקוראים ל-setGraph
עם תרשים עם 13 או 29 יעדים. (I1a9f1, b/195171984) - הבעיה שבה הגנרטור של SafeArgs ב-Java גורם לאזהרות של איתור שגיאות בקוד (lint) בזמן יצירת כיתות Args אמורה להיפתר. (I1a666, b/185843837)
תרומה חיצונית
- תודה ל-ospixd על כך שווידא שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) נמצאים ב-
Uri
בקישורי העומק. (#204, b/185527157)
גרסה 2.4.0-alpha07
18 באוגוסט 2021
androidx.navigation:navigation-*:2.4.0-alpha07
משוחרר. גרסה 2.4.0-alpha07 מכילה את ההצהרות האלה.
תיקוני באגים
- עכשיו, כשמשתמשים בתכונה 'עריכת נתיב ניווט', המצב נשמר כראוי אחרי שינויים בהגדרות וכשמשנים גרפים, גם אם משתמשים בכמה סטאקים של חזרה אחורה. (If5a3d, b/195141957)
- בחירת אותו כרטיסייה מחדש כשמשתמשים בתכונה 'ניווט בהרכבה' עם כמה ערימות חזרה לא תגרום יותר למסך ריק. (I860dc, b/194925622)
NavHost
מזהה עכשיו שינויים ב-Lifecycle.State
שלNavBackStackEntry
, כלומר שימוש ב-NavHost
בחלקיק יתבצע עכשיו מחדש כאשר מחזור החיים ישתנה, במקום להוביל למסך ריק. (I4eb85, b/195864489)- תוקנה בעיה שבה סגירת
DialogFragment
לא עדכנה כראוי את המצבNavController
אחרי יצירת מחדש של הפעילות (כלומר, אחרי שינוי בהגדרות). (Icd72b) - תוקנה בעיה שבה הצגת חלון דיאלוג לא מעדכנת את הטיפול של NavController בלחצן החזרה אחורה במערכת, וכתוצאה מכך יכול להיות ש-NavController יפריע ללחצן החזרה אחורה גם אם אין לו סטאק חזרה אחורה להצגה. (If3b34)
- Safe-args יוצר עכשיו באופן אוטומטי שיטה
toSavedStateHandle
למשתנים, שאפשר להשתמש בה כדי לבדוק את הקוד שלViewModel
. (If1e2d, b/193353880)
גרסה 2.4.0-alpha06
4 באוגוסט 2021
androidx.navigation:navigation-*:2.4.0-alpha06
משוחרר. גרסה 2.4.0-alpha06 מכילה את ההצהרות האלה.
שינויים ב-API
- השמות של השיטות
requireSlidingPaneLayout()
ו-requireDetailPaneNavHostFragment()
ב-AbstractListDetailFragment
השתנו ל-getSlidingPaneLayout()
ו-getDetailPaneNavHostFragment()
, בהתאמה. (I34a08)
שינויים בהתנהגות
- כשמנווטים באמצעות אנימציות (כמו
Crossfade
), עכשיוLifecycle
של היעד החדש יגיע ל-RESUMED
רק כשהאנימציה תושלם. (If0543, b/172112072, b/194301889) - עכשיו, הלחצן
NavHost
בחלונית הניווט מגדיר את התרשים כחלק מהקומפוזיציה הראשונה. (Ieb7be)
תיקוני באגים
- הצגת היעד האחרון של תרשים ניווט כבר לא מפעילה את השגיאה
ClassCastException
. (If0543, b/172112072, b/194301889) - תוקן
NullPointerException
שהתרחש כשמוסיפים קישור עומק ללאUri
ומנווטים דרך מסלול או קישור עומק. (938a0c, b/193805425) - תוקנה בעיה בתכונה 'כתיבה בזמן ניווט', שבה
NavBackStackEntry
עם קישור עומק לא הגיע למצבRESUMED
. (I192c5) - תוקנה בעיה שבה הצגת חלון דו-שיח לא עדכנה את הטיפול של NavController בלחצן החזרה אחורה במערכת, מה שעלול לגרום ל-NavController ליירט את לחצן החזרה אחורה גם אם אין לו סטאק חזרה אחורה להצגה. (aosp/1782668)
גרסה 2.4.0-alpha05
21 ביולי 2021
androidx.navigation:navigation-*:2.4.0-alpha05
משוחרר. גרסה 2.4.0-alpha05 מכילה את ההצהרות האלה.
שינויים בהתנהגות
- כשמשתמשים ב-
NavHost
בתכונה 'כתיבה בזמן ניווט', עכשיו תמיד נעשה שימוש במעברים חלקים בין קטעים כשעוברים בין יעדים. (I07049, b/172112072) - עכשיו אפשר לבצע שינויים בתרשים של NavHost. תרשים עם אותו startDestination ועם אותם יעדים בתרשים ייחשב כזהה, ולא ינקה את
NavController
back stack. (I0b8db, b/175392262)
תיקוני באגים
- תוקנה בעיה מסוג
NoSuchElementException
בקריאה ל-popBackStack()
מתוךLifecycleObserver
שמצורף ל-NavBackStackEntry
, שנגרמה כתוצאה מעדכונים חוזרים למצב של NavController. (I64621) AbstractListDetailFragment
מאפשר עכשיו להסיר אתSlidingPaneLayout
לחלוטין מה-APK כשלא משתמשים ב-AbstractListDetailFragment
. (I611ad)- עכשיו,
NavGraph
ו-NavDestination
מבטלים את השיטה equals, כך ששני אובייקטים עם אותם ערכים ייחשבו זהים. (I166eb, b/175392262)
גרסה 2.4.0-alpha04
1 ביולי 2021
androidx.navigation:navigation-*:2.4.0-alpha04
משוחרר. גרסה 2.4.0-alpha04 מכילה את ההצהרות האלה.
תכונות חדשות
- הארטיפקט
navigation-fragment
מכיל עכשיו הטמעה מוכנה מראש של פריסה עם שתי חלוניות באמצעותAbstractListDetailFragment
החדש. בקטע הזה נעשה שימוש ב-SlidingPaneLayout
כדי לנהל חלונית רשימה (שסופקת על ידי תת-הסוג) וחלונית פרטים, שבה נעשה שימוש ב-NavHostFragment
כהטמעה שלה, כפי שמוצג בהטמעת הדוגמה. (Iac4be, b/191276636) - ה-
NavHost
של הארטיפקטnavigation-compose
תומך עכשיו ביעדים מסוג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
- השם של הפונקציה
add
ב-NavigatorState
השתנה ל-push
. כל הקריאות הנוכחיות ל-add()
צריכות להשתנות ל-push(). (Ie89fc, b/172112072) - עכשיו אפשר להשתמש בממשקי ה-API
pushWithTransaction
ו-popWithTransition
ב-NavigatorState
במכונותNavigator
בהתאמה אישית כדי לדחוף או להוציא יעד באופן אסינכרוני. חשוב לדעת שעדיין אף אחד מהנווטים הכלולים לא משתמש בממשקי ה-API האלה. (Ic4d7c, b/172112072)
שינויים בהתנהגות
NavDeepLinkBuilder
מוסיף עכשיו אתPendingIntent.FLAG_IMMUTABLE
ל-PendingIntent
שמוחזר על ידיcreatePendingIntent()
, כדי לוודא שממשק ה-API הזה פועל כצפוי כשמטרגטים ל-Android 12. (If8c52)
תיקוני באגים
- תוקנה בעיה ב-
<include-dynamic>
שבה הארגומנטים שהועברו לתרשים לא הועברו בצורה נכונה לתרשים שנוסף באופן דינמי. (I3e115) - תוקנה בעיה ב-
NullPointerException
כשמנווטים ליעד באמצעות ארגומנטstring[]
עם ערך ברירת מחדל של@null
. (I1fbe8) - הוספת כללי ProGuard ל-
@Navigator.Name
, לפתרון בעיות בשימוש במצב מלא של R8 3.1. (I2add9, b/191654433) - SafeArgs לא ייכשל יותר בזמן ה-build של האפליקציה עם גרסאות
Kotlin
שקודמות ל-1.5.0
. (Icd1ff, b/190739257)
גרסה 2.4.0-alpha03
16 ביוני 2021
androidx.navigation:navigation-*:2.4.0-alpha03
משוחרר. גרסה 2.4.0-alpha03 מכילה את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה שבה נדרשו שתי קריאות ל-
navigate()
כדי לנווט לגרף דינמי שכלול. (I7785c, b/188859835) - תוקנה נסיגה (regression) בניווט
2.4.0-alpha01
שבהsetupActionBarWithNavController()
לא הסיר כראוי את סמל למעלה כשנמצאים ביעד ברמה העליונה. (I5d443, b/189868637) - תוקנה בעיה ב-
IllegalStateException
כשקוראים ל-popBackStack()
אחרי שקודם לכן הוצאתם את תרשים הבסיס של NavController. (I2a330, b/190265699) - עכשיו כללי ProGuard ל-
by navArgs()
חלים כראוי כשמשתמשים ב-navigation-common
או בכל ארטיפקט שמבוסס עליו. (I68800, b/190082521) OnDestinationChangedListener
שמפעילnavigate()
בפעם הראשונה שהוא מקבל שיחה חוזרת מקבל עכשיו שיחה חוזרת שנייה עם היעד שאליו מנווט. (Ie5f9e, b/190228815)- Safe Args לא קורס יותר כשמשתמשים בו עם מודולים דינמיים של תכונות ו-AGP מגרסה 7.0 ואילך. (I69518, b/189966576)
בעיה ידועה
- כשמשתמשים ב-Gradle
6.7.0
, Safe Args נכשל עם שגיאהUnable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
בגלל תלות בגרסה ישנה יותר של Kotlin. אפשר לעקוף את הבעיה הזו על ידי עדכון ל-Gradle 7.0. (b/190739257)
גרסה 2.4.0-alpha02
2 ביוני 2021
androidx.navigation:navigation-*:2.4.0-alpha02
משוחרר. גרסה 2.4.0-alpha02 כוללת את ההצהרות האלה.
תכונות חדשות
- מעכשיו יש תמיכה במסלולים ליעדי Activity, Fragment ו-Dialog, וגם ב-DynamicNavigation Kotlin DSL. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
הוסיף באופן זמני ממשקי API ניסיוניים כדי לאפשר לכם לבטל את ההסכמה לשמירת המצב. אמנם תמיד כדאי לשמור את המצב, אבל עדיין יש שימושים בספריות שהוצאו משימוש (כלומר, קטעי קוד שנשמרו) שלא ניתן לתמוך בהם כששומרים את המצב. לכן, זו הזדמנות לאפליקציות לעבור בהדרגה ממשקי API שלא נתמכים. (Idf93c)רכיב הניווט מספק עכשיו ממשקי API של
findDestination()
ו-getHierarchy()
שאפשר להשתמש בהם כדי להטמיע ממשק משתמש מותאם אישית של Navigation.findDestination()
היא פונקציית תוסף שלNavGraph
שמאתרת יעד בתרשים.getHierarchy()
היא פונקציה ב-NavDestination
שאפשר להשתמש בה כדי לוודא אם יעד נתון נמצא בהיררכיה של יעד אחר.(I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
שיטות NavigationUI שהשתמשו ב-
BottomNavigationView
עודכנו כך שישתמשו במקום זאת בסיווג ההורה שלו,NavigationBarView
, שהוצג ב-Material1.4.0
. כך אפשר להשתמש בשיטות האלה עםNavigationRailView
. (Ib0b36, b/182938895)כשמנפחים רכיב
<action>
באמצעות XML, מאפייני האנימציה יכולים להשתמש במאפיינים שחולצו מהעיצוב באמצעות התחבירapp:enterAnim="?attr/transitionEnter"
. (I07bc1, b/178291654)
שינויים ב-API
- הוצאנו משימוש בוני DSL של Kotlin שמשתמשים במזהה, וצריך להחליף אותם בבוני נתיב (I85b42, b/188816479) (I9f58f, b/188816479)
תיקוני באגים
DialogFragmentNavigator
משתמש עכשיו ב-NavigatorState.pop()
API כדי להודיע ל-NavController
כשתיבת דו-שיח נסגרת על ידי לחיצה על לחצן החזרה למערכת או על ידי לחיצה מחוץ לתיבת הדו-שיח, וכך להבטיח שהמצב שלNavController
תמיד מסתנכרן עם המצב של Navigator. (I2ead9)כשמשתמשים בקריאה חוזרת (callback) של
onDestinationChanged
כדי לבצע פעולות על רשימתOnDestinationChangedListeners
, המערכת לא מחזירה יותר את הערךConcurrentModificationException
. (Ib1707, b/188860458)Safe Args לא קורס יותר כשמנסים ליצור מאפייני כיוון ב-Kotlin. (Id2416, b/188564435)
השיטה setId ב-NavDestination מסומנת עכשיו כראוי ב-
@IdRes
, כך שהיא מקבלת רק מזהי משאבים. (I69b80)הפרמטר int של
findNode
הוא עכשיוresId
במקוםresid
. (I7711d)
עדכון יחסי תלות
- Safe-Args תלוי עכשיו בפלאגין של Android Gradle מגרסה 4.2.0. המשמעות היא שאמורה להפסיק להופיע האזהרה לגבי השימוש ב-
applicationIdTextResource
. (I6d67b, b/172824579)
גרסה 2.4.0-alpha01
18 במאי 2021
androidx.navigation:navigation-*:2.4.0-alpha01
משוחרר. גרסה 2.4.0-alpha01 מכילה את ההצהרות האלה.
תכונות חדשות
- השיטה
currentBackStackEntryAsFlow()
ב-NavController
מספקתFlow
שמפיק אירוע בכל פעם ש-NavBackStackEntry
הנוכחי משתנה. אפשר להשתמש בתהליך הזה כחלופה לניהולOnDestinationChangedListener
באופן ידני. (I19c4a, #89, b/163947280)
מספר סטאקים של חזרה אחורה
ה-NavController אחראי לניהול סטאק החזרה לאחור של היעדים, להוספת יעדים לסטאק החזרה לאחור כשאתם navigate()
אליהם ולהסרתם כשאתם קוראים ל-popBackStack()
או מפעילים את לחצן החזרה לאחור במערכת. הכיתה הקיימת NavOptions
והשילוב עם הרשומות <action>
בקובץ ה-XML של תרשים הניווט הורחבו כדי לתמוך בשמירה ובשחזור של סטאק החזרה אחורה. (b/80029773)
כחלק מהשינוי הזה, השיטות NavigationUI
של onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
ו-NavigationView.setupWithNavController()
שומרות ומשחזרות באופן אוטומטי את המצב של יעדים שהוצאו מהמקבץ, ומאפשרות תמיכה במספר מקבצים של 'חזרה אחורה' בלי שינויים בקוד. כשמשתמשים בניווט עם קטעי קוד, זו הדרך המומלצת לשילוב עם כמה סטאקים של היסטוריית חזרה. (Ie07ca)
ממשקי ה-API הבסיסיים לשמירה ולשחזור המצב גלויים במספר פלטפורמות:
ב-Navigation XML, הרכיב
<action>
יכול עכשיו להשתמש במאפיינים הבוליאניים שלapp:popUpToSaveState
ו-app:restoreState
כדי לשמור את המצב של כל יעד שמוצג באמצעותapp:popUpTo
ולשחזר את המצב המשויך ליעד שהוענק כ-app:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
ב-
navOptions
Kotlin DSL, אפשר להוסיף את הנכס הבוליאניrestoreState
ואת הנכס הבוליאניsaveState
ל-popUpTo
builder:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
כשיוצרים ידנית אובייקט
NavOptions
דרךNavOptions.Builder
, אפשר להשתמש ב-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
ברמת יעד הניווט. ממשקי ה-API של Navigator
עודכנו כדי לאפשר לכל Navigator
לתמוך בשמירה ובשחזור של המצב שלו.
ה-ComposeNavigator
שמשמש ליעדי composable
בתכונה 'כתיבה בזמן ניווט', וה-FragmentNavigator
ו-DynamicFragmentNavigator
שמשמש ליעדי <fragment>
בתכונה 'ניווט באמצעות קטעים', עודכנו כך שישתמשו בממשקי ה-API החדשים של Navigator וישפרו את התמיכה בשמירה ובשחזור של המצב.
מסלולי ניווט
מסלול הוא String
שמזהה יעד באופן ייחודי. בעבר, המושג הזה שימש רק ב-Navigation Compose, אבל עכשיו הוא הפך לחלק מרכזי בממשקי ה-API של Navigation. כך אפשר להשתמש באפשרות חלופית לשימוש במזהי מספר שלמים בזמן יצירת הגרף באמצעות Navigation Kotlin DSL. (b/172823546)
לכל ממשקי ה-API שהיו מקבלים בעבר רק מזהה יש עכשיו עומס יתר שמקבל מסלול String
. כולל navigate()
, popBackStack()
, popUpTo()
ו-getBackStackEntry()
.
לכך היו השלכות מסוימות על ממשקי ה-API:
- המאפיין
popUpTo
ב-Kotlin DSL יצא משימוש והוחלף במאפייןpopUpToId
. (I59c73, b/172823546) - ממשק ה-API
getStartDestination()
הוצא משימוש והוחלף על ידיgetStartDestinationId()
. (I0887f, b/172823546)
מפתחים שמשדרגים מגרסאות קודמות של Navigation Compose ל-Navigation Compose 2.4.0-alpha01
צריכים להסיר את הייבוא הבא בשיטות התוספים, כי הוא כבר לא נדרש:
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
הארגומנט KEY_ROUTE
הוחלף בנכס route
ב-NavDestination
, וכך אפשר לקרוא ל-navBackStackEntry.destination.route
ישירות.
שינויים ב-API
- כל פריטי המידע שנוצרו בתהליך הפיתוח (artifacts) של Navigation נכתבו מחדש ב-Kotlin. בעקבות זאת, חל שיפור ביכולת של כיתות להחזיק ערך null באמצעות גנריקים (כמו תת-כיתות של
NavType
). כל פונקציות ההרחבה של Kotlin שהיו חלק מהארטיפקטים של-ktx
הועברו לארטיפקטים הראשיים שלהן. הארטיפקטים של-ktx
ימשיכו להתפרסם, אבל הם יהיו ריקים לחלוטין. (b/184292145) NavDeepLinkBuilder
תומך עכשיו בהוספת כמה יעדים נפרדים למחסנית הקודקודים הקודמת שנוצרת. (I3ee0d, b/147913689)- הוספת פונקציות ייצור עבור
DynamicNavHostFragment
(Icd515, b/175222619) - המזהה הייחודי של
NavBackStackEntry
נחשף עכשיו כחלק מ-API הציבורי שלו. (Ie033a) - השדות
name
ו-argument
ופונקציות הפירוק שלNamedNavArgument
גלויים לכולם. (#174, b/181320559) - הוספנו את התוסף החדש
NavBackStackEntry#provideToCompositionLocals
שמספק אתNavBackStackEntry
ל-locals הרלוונטיים של הקומפוזיציה. (#175, b/187229439)
Safe Args
Safe Args יוצר עכשיו שיטה
fromSavedStateHandle()
לכל כיתהNavArgs
. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
עדכנו את Safe Args כך שיהיה תלוי ב-KotlinPoet
1.8.0
. (#172, b/183990444)
שינויים בהתנהגות
- הניווט תלוי עכשיו ב-Lifecycle
2.3.1
, ומסמן אתsetGraph()
,popBackStack()
,navigateUp()
ו-navigate()
, השיטות שמעדכנות אתNavBackStackEntry
Lifecycle
, בתור@MainThread
. כך הניווט תואם לאכיפה של פעילות השרשור הראשי שהוצגה ב-Lifecycle2.3.0
. (b/171125856) - ניתוח הארגומנטים של Enum מקישורי עומק לא תלוי עכשיו אותיות רישיות, כך שקישורי עומק כמו
http://www.example.com/red
יכולים להתאים לקישורי עומק כמוwww.example.com/{color}
גם אם הערך של Enum הואRED
. (#152, b/135857840)
תאימות ל-Compose
androidx.navigation:navigation-compose:2.4.0-alpha01
תואם רק ל-Compose בגרסה1.0.0-beta07
ואילך.
תיקוני באגים
- תוקנה בעיה שבה תוספי ארגומנטים נלווים נותנים עדיפות על פני קישורי עומק עם סיומת תואמת. (#153, b/184072811)
NavHostFragment
תומך עכשיו ב-Navigators מותאמים אישית שמשתמשים באותו@Navigator.Name("dialog")
כמוDialogFragmentNavigator
שמוגדרת כברירת מחדל. (Ib1c2c, b/175979140)- שיפרנו את ההתנהגות של
NavigatorProvider#addNavigator
כדי לוודא שקריאה חוזרת ונשנית אליו עם אותה מכונה לא גורמת לבעיות. (#176, b/187443146)
תרומות חיצוניות
- תודה ל-simonschiller על הוספת תמיכה ב-Safe Args ליצירת שיטת
fromSavedStateHandle()
לכל כיתה מסוגNavArgs
. (#122, b/136967621) - תודה ל-Bradleycorn על כך שהפך את הניתוח של ארגומנטים מסוג Enum מקישורים עומק ללא קשר לאותיות רישיות. (#152, b/135857840)
- תודה ל-osipxd על תיקון בעיה שבה placeholder לארגומנטים בסוף הטקסט מקבל עדיפות על פני קישורי עומק עם סיומת תואמת. (#153, b/184072811)
- תודה ל-tatocaster על עדכון Safe Args כך שיהיה תלוי ב-KotlinPoet
1.8.0
. (#172, b/183990444) - תודה ל-jossiwolf על כך שהפך את השדות
name
ו-argument
ואת פונקציות הפירוק שלNamedNavArgument
לציבוריות. (#174, b/181320559) - תודה ל-jossiwolf על הצגת התוסף החדש
NavBackStackEntry#provideToCompositionLocals
שמספק את הערך שלNavBackStackEntry
ל-locals הרלוונטיים של היצירה. (#175, b/187229439) - תודה ל-jossiwolf על שיפור ההתנהגות של
NavigatorProvider#addNavigator
כדי לוודא שהפעלה חוזרת של הפונקציה עם אותה מכונה לא גורמת לבעיות. (#176, b/187443146)
Navigation Compose גרסה 1.0.0
גרסה 1.0.0-alpha10
7 באפריל 2021
androidx.navigation:navigation-compose:1.0.0-alpha10
משוחרר. גרסה 1.0.0-alpha10 מכילה את ההצהרות האלה.
שינויים ב-API
NavHost
מקבל עכשיוModifier
, שמועברים לקונטיינר הניתן לקיפול שמקיף את הרכיבים הניתנים לקיפול של היעד. (I85aca, b/175125483)
תיקוני באגים
NavHost
פועל עכשיו גם אם לא נמצאOnBackPressedDispatcherOwner
, למשל כשמציגים תצוגה מקדימה שלNavHost
. (I7d8b4)- עכשיו, 'כתיבה בזמן ניווט' תלויה בניווט
2.3.5
, וכך נפתרה בעיה שהתרחשה כשמשתמשים ב-BackHandler
בתוך יעדNavHost
. (I7e63b, b/182284739)
גרסה 1.0.0-alpha09
10 במרץ 2021
androidx.navigation:navigation-compose:1.0.0-alpha09
משוחרר. גרסה 1.0.0-alpha09 מכילה את ההוספות האלה.
שינויים ב-API
- הפונקציה
LocalViewModelStoreOwner.current
מחזירה עכשיוViewModelStoreOwner
שאפשר להעביר לו ערך null, כדי לקבוע טוב יותר אםViewModelStoreOwner
זמין בהרכב הנוכחי. ממשקי API שדורשיםViewModelStoreOwner
, כמוviewModel()
ו-NavHost
, עדיין גורמים להשלכת חריגה אם לא מגדיריםViewModelStoreOwner
. (Idf39a)
תיקוני באגים
- Navigation Compose תלוי עכשיו ב-Navigation 2.3.4, שכוללת את התיקון לניסיון להגדיר את אותו אובייקט ViewModelStore אחרי הגדרת התרשים. (I65c24, b/177825470)
גרסה 1.0.0-alpha08
24 בפברואר 2021
androidx.navigation:navigation-compose:1.0.0-alpha08
משוחרר. גרסה 1.0.0-alpha08 מכילה את ההצהרות האלה.
תכונות חדשות
NavHost
מאכלס עכשיו אתLocalSavedStateRegistryOwner
CompositionLocal ב-NavBackStackEntry
של היעד הזה, כדי להבטיח שכל מצב שנשמר ישירות ב-SavedStateRegistry
יישמר ויוחזר לצד היעד. (I435d7, b/179469431)
גרסה 1.0.0-alpha07
10 בפברואר 2021
androidx.navigation:navigation-compose:1.0.0-alpha07
משוחרר. גרסה 1.0.0-alpha07 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
עדכוני יחסי תלות
- Navigation Compose תלוי עכשיו ב-Lifecycle ViewModel Compose 1.0.0-alpha01 כדי לספק תמיכה ב-
viewModel()
ליעדים מסוגcomposable
. (I7a374) NavHost
משתמש עכשיו ב-LocalOnBackPressedDispatcherOwner
החדש מ-Activity-Compose 1.3.0-alpha01 כדי לקבל את ה-OnBackPressedDispatcher
שמוגדר ב-NavController
. (I65b12)
גרסה 1.0.0-alpha06
28 בינואר 2021
androidx.navigation:navigation-compose:1.0.0-alpha06
משוחרר. גרסה 1.0.0-alpha06 מכילה את ההוספות האלה.
שינויים ב-API
- נוספה שיטת תוסף
getBackStackEntry(route: String)
ב-NavController
שמחזירה אתNavBackStackEntry
המשויך. (If8931)
גרסה 1.0.0-alpha05
13 בינואר 2021
androidx.navigation:navigation-compose:1.0.0-alpha05
משוחרר. גרסה 1.0.0-alpha05 מכילה את ההוספות האלה.
העדכון מותנה ב-Compose 1.0.0-alpha10.
גרסה 1.0.0-alpha04
16 בדצמבר 2020
androidx.navigation:navigation-compose:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
- עודכן לתאימות עם Compose
1.0.0-alpha09
.
גרסה 1.0.0-alpha03
2 בדצמבר 2020
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
11 בנובמבר 2020
androidx.navigation:navigation-compose:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את ההצהרות האלה.
שינויים ב-API
- רכיב ה-Navigation compose תומך עכשיו ב-NavOptions לשימוש בפעולות popUpTo ו-launchSingleTop (If96c3, b/171468994)
- נוספה פונקציית ניווט שמקבלת מסלול במקום מזהה, ומאפשרת ליצור תרשימים בתצוגת עץ ב-Navigation Compose DSL. (I1661d)
- עכשיו, startDestination מופיע לפני המסלול ברשימת הפרמטרים של NavHost (Ie620e)
- עכשיו אפשר ליצור תרשים באמצעות המסלול כיעד התחלה מחוץ ל-composable של NavHost. (Iceb75)
גרסה 1.0.0-alpha01
28 באוקטובר 2020
android.navigation:navigation-compose:1.0.0-alpha01
משוחרר. גרסה 1.0.0-alpha01 מכילה את ההצהרות האלה.
תכונות חדשות
הארטיפקט navigation-compose
מספק שילוב בין רכיב הניווט לבין Jetpack פיתוח נייטיב. הוא משתמש בפונקציות @Composable
בתור היעדים באפליקציה.
הגרסה הראשונית הזו כוללת:
- רכיב
NavHost
שאפשר להרכיב, שמאפשר ליצור את תרשים הניווט באמצעות DSL של Kotlin. - הגדרת ההיקף של מחזור החיים,
ViewModel
והמצב שנשמר ברמת היעד. - שילוב אוטומטי עם לחצן החזרה של המערכת.
- תמיכה בהעברת ארגומנטים, בהצמדת קישורי עומק ליעדים ובחזרת תוצאה ליעדים קודמים.
- כותבים פונקציות עזר ספציפיות ב-
rememberNavController()
וב-currentBackStackEntryAsState()
כדי לאפשר העלאת מצב ולחבר אתNavController
לרכיבים שניתנים ליצירה מחוץ ל-NavHost
(כמו סרגל ניווט תחתון).
מידע נוסף זמין במדריך לניווט ב-Compose.
גרסה 2.3.5
גרסה 2.3.5
7 באפריל 2021
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)
עדכוני יחסי תלות
- פלאגין Navigation Safe Args ל-Gradle תלוי עכשיו בפלאגין Kotlin Gradle 1.4.31. (aosp/1661058, b/181156413)
תרומה חיצונית
- תודה ל-
bentrengrove
על בקשת המשיכה (pull request) שבעזרתה הניתוח של דומיינים של קישורי עומק לא תלוי אותיות רישיות. (#144, b/153829033)
גרסה 2.3.4
גרסה 2.3.4
10 במרץ 2021
androidx.navigation:navigation-*:2.3.4
משוחרר. גרסה 2.3.4 מכילה את ההצהרות האלה.
תכונות חדשות
- עכשיו אפשר לנתח כראוי את הארגומנטים של
ReferenceType
כשהם נשלחים כחלק מ-URI של קישור עומק. אפשר להזין את הערך של המספר השלם הגולמי וגם ערכים הקסדצימליים עם הקידומת0x
. (#127, b/179166693) - עכשיו יש תמיכה בערכים שמוגדרים כברירת מחדל של מספרים שלמים ב-
android:defaultValue
של ארגומנט עםapp:argType="float"
, כך שאפשר להשתמש ב-android:defaultValue="0"
במקום ב-0.0
. (#117, b/173766247)
תיקוני באגים
- תיקון בעיה שבה התקדמות ההתקנה נתקעה כשמשתמשים בתמיכה של 'ניווט' בתכונות דינמיות. (Ib27a7, b/169636207)
- קריאה ל-
setViewModelStore
או ל-setLifecycleOwner
עם אותו אובייקט שכבר הוגדר תהיה עכשיו פעולה ללא תוצאה (Idf491, b/177825470) - Safe-Args מוסיף עכשיו הערות להשתקה לשיטות המתאימות כשמשתמשים ב-Java. (I8fbc5, b/179463137)
תרומות חיצוניות
- תודה ל-
JvmName
על בקשת המשיכה (pull request) שבעזרתה אפשר עכשיו לנתח כראוי את הארגומנטים שלReferenceType
כשהם נשלחים כחלק ממזהה URI של קישור עומק. (#127, b/179166693) - תודה ל-
tatocaster
על בקשת המשיכה (pull request) שאפשרה ל-defaultValue
עבור ארגומנט עםapp:argType=”float”
לתמוך עכשיו בערכי ברירת מחדל שלמים. (#117, b/173766247)
גרסה 2.3.3
גרסה 2.3.3
27 בינואר 2021
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
2 בדצמבר 2020
androidx.navigation:navigation-*:2.3.2
משוחרר. גרסה 2.3.2 מכילה את השמירות האלה.
תיקוני באגים
- תוקן נסיגה ב-
NavigationUI
שבה שימוש ביעד<activity>
עםonNavDestinationSelected
לא מאפשר לנווט לפעילות. (I22e34, b/171364502) - תוקנה בעיה שבה הפקודה
navigation-dynamic-features-fragment
גרמה לניווט ליעד החדש שהותקן כמה פעמים. (aosp/1486056, b/169636207) - תוקנה בעיה שבה ארגומנטים שמוגדרים כברירת מחדל לא נשלחו למכונות
OnDestinationChangedListener
כשמשתמשים ב-launchSingleTop
. (I2c5cb) - תוקנה בעיה שבה ניווט לתרשים ניווט בתצוגת עץ לא יצר מופע תרשים חדש בסטאק העורפי. (Ifc831)
- תוקנה בעיה שבה שימוש ב-
navigate()
עםpopUpTo
שהסיר את היעד האחרון בתרשים ניווט לא גרם להרס מיידי של תרשים הניווט עצמו והסרה שלו מהמקבץ האחורי. (I910a3) - Navigation SafeArgs משתמש עכשיו ב-KotlinPoet בגרסה 1.7.2, שמוסיפה תמיכה במצב ה-API המפורש של Kotlin. (I918b5)
NavHostFragment.findNavController(Fragment)
בודק עכשיו גם את תצוגת ה-decor ברמה הבסיסית של DialogFragment, בנוסף לבדיקות הקיימות של היררכיית ה-Fragment ושל היררכיית התצוגה של ה-Fragment. כך תוכלו לבדוק קטעי תיבת דו-שיח שמשתמשים בתכונה 'ניווט' באמצעותFragmentScenario
ו-Navigation.setViewNavController()
. (I69e0d)
גרסה 2.3.1
גרסה 2.3.1
14 באוקטובר 2020
androidx.navigation:navigation-*:2.3.1
משוחרר. גרסה 2.3.1 מכילה את השמירות האלה.
תכונות חדשות
- מקורות האנימציה שמוגדרים כברירת מחדל נוספו לממשק המשתמש של הניווט, ומומלץ להשתמש בהם במקום במקורות האנימציה שמוגדרים כברירת מחדל. (b/167430145)
- NavOptions משנה עכשיו את השיטות hashcode ו-equals (b/161586466)
- הניווט כולל עכשיו את היעד הנוכחי ב-IllegalArgumentException "No destination with ID", מה שצפוי לשפר את חוויית ניפוי הבאגים של המפתחים. (b/168311416)
תיקוני באגים
- Safe Args לא יאחז יותר את שורת ההחזרה, גם אם שם הכיתה של הארגומנט שנוצר ארוך מ-100 תווים. (b/168584987)
שינויים ביחסי התלות
navigation-ui
תלוי עכשיו ב-DrawerLayout 1.1.1, כדי לוודא ש-NavigationUI
יוכל לפתוח את חלונית ההזזה גם כשמשתמשים ב-LOCK_MODE_LOCKED_CLOSED
או ב-LOCK_MODE_LOCKED_OPEN
. (b/162253907)- Safe Args תלוי עכשיו ב-KotlinPoet 1.6.0 (aosp/1435911)
- Safe Args תלוי עכשיו ב-AGP 4.0.1 (aosp/1442337)
גרסה
גרסה
24 ביוני 2020
androidx.navigation:navigation-*:2.3.0
משוחרר. גרסה 2.3.0 כוללת את ההצהרות האלה.
שינויים משמעותיים מאז גרסה 2.2.0
- שילוב של מודול תכונות: הארטיפקטים
navigation-dynamic-features-runtime
ו-navigation-dynamic-features-fragment
מאפשרים לנווט ליעדים שמוגדרים במודולי התכונות, תוך טיפול אוטומטי בהתקנה של מודול התכונות לפי הצורך. מידע נוסף זמין במאמר ניווט באמצעות מודולים של תכונות. - בדיקת הניווט: הארטיפקט
navigation-testing
מספקTestNavHostController
שמאפשר להגדיר את היעד הנוכחי ולאמת את סטאק החזרה לאחר פעולות הניווט. מידע נוסף זמין במאמר בדיקת הניווט. - החזרת תוצאה: עכשיו אפשר לגשת ל-
NavBackStackEntry
שמשויך לכל יעד ב-Navigation back stack באמצעותSavedStateHandle
, שמתאים לאחסון כמויות קטנות של מצב ששמור וצריך לשייך לרשומה מסוימת ב-back stack. מידע נוסף זמין במאמר החזרת תוצאה ליעד הקודם. - תמיכה ב-
NavigationUI
ב-Openable
: כל השימושים ב-DrawerLayout
ב-NavigationUI
הוחלפו בממשקOpenable
הגנרי יותר שנוסף ב-CustomView1.1.0
והוטמע על ידיDrawerLayout
ב-DrawerLayout1.1.0
. - תמיכה בפעולות ובסוגים של Mime בקישורי עומק: הרחבנו את התמיכה בקישורי עומק כך שתכלול את
app:action
ו-app:mimeType
, בנוסף ל-app:uri
שהיה זמין בעבר.NavController
תומך עכשיו בניווט לפי כל שילוב של השדות האלה באמצעות הכיתה החדשהNavDeepLinkRequest
. מידע נוסף זמין במאמר ניווט באמצעות NavDeepLinkRequest.
בעיות מוכרות
- התמיכה בפעולות של קישורי עומק ובסוגי MIME עדיין לא זמינה ב-Manifest Merger. עד שהעבודה הזו תושלם, אלמנטים של
<intent-filter>
שנוצרים מהאלמנט<nav-graph>
במניפסט לא יכללו את סוג ה-MIME שלכם באלמנט<data>
או את ה-<action>
המותאם אישית. צריך להוסיף באופן ידני<intent-filter>
מתאים למניפסט.
גרסה 2.3.0-rc01
10 ביוני 2020
androidx.navigation:navigation-*:2.3.0-rc01
משוחרר. גרסה 2.3.0-rc01 כוללת את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה ב-
NullPointerException
כשמחליפים מופע של יעד ללא ארגומנטים במופע אחר עם ארגומנטים באמצעותsingleTop
. (b/158006669) - כל חריגות ה-
destination is unknown
שהושלחו על ידיNavController
כוללות עכשיו מידע נוסף על ניפוי הבאגים שיעזור לקבוע את המצב של ה-NavController
. (b/157764916)
גרסה 2.3.0-beta01
20 במאי 2020
androidx.navigation:navigation-*:2.3.0-beta01
משוחררים. גרסה 2.3.0-beta01 מכילה את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה שבה
Lifecycle
שלNavBackStackEntry
לא התעדכן כראוי אחרי מותו של התהליך. (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
29 באפריל 2020
androidx.navigation:navigation-*:2.3.0-alpha06
משוחרר. (גרסה 2.3.0-alpha06 מכילה את ההתחייבויות האלה.)
תכונות חדשות
- הרחבנו את התמיכה בקישורי עומק כך שתכלול את
app:action
ו-app:mimeType
, בנוסף ל-app:uri
שהיה זמין בעבר. מעכשיו, NavController תומך בניווט לפי כל שילוב של השדות האלה באמצעות הכיתה החדשהNavDeepLinkRequest
. (b/136573074, b/135334841)
שינויים ב-API
- הרחבנו מאוד את התמיכה ב-Kotlin DSL ליעדים של ניווט דינמי. (b/148969800)
תיקוני באגים
- תוקנה בעיה שבה מערכת Google Ads התעלמה מ-Intents של קישורי עומק כשנעשה שימוש ביעד התחלה בתצוגת עץ. (b/154532067)
גרסה 2.3.0-alpha05
15 באפריל 2020
androidx.navigation:navigation-*:2.3.0-alpha05
משוחרר. גרסה 2.3.0-alpha05 מכילה את ההצהרות האלה.
תכונות חדשות
- בהכללות של תרשים דינמי באמצעות
<include-dynamic>
, כבר אין צורך לציין אתapp:graphPackage
, והמערכת תשתמש באפשרות ברירת המחדל על ידי הוספת הסיומתmoduleName
ל-applicationId
אחרי נקודה. אם אתם צריכים להתאים אישית אתgraphPackage
, עכשיו יש תמיכה ב-${applicationId}
placeholder. (b/152696768) - ב-Navigation Graph Kotlin DSL יש עכשיו
defaultArguments
Map
לפעולות, שמשקף את היכולת להגדיר ערכי ברירת מחדל לאלמנטי<action>
בקובצי XML של Navigation. (b/150345605)
תיקוני באגים
- מ-Navigation 2.2.2: תוקן שגיאת
IllegalStateException
כשמקשרים לעומק ליעד ההתחלה של התרשים, אם יש כמה מופעים שלNavHostFragment
בפעילות. (b/147378752)
עדכוני יחסי תלות
- הניווט תלוי עכשיו בקטע
1.2.4
. (aosp/1277325) - הניווט הדינמי תלוי עכשיו ב-Play Core
1.7.2
. (aosp/1282257)
גרסה 2.3.0-alpha04
18 במרץ 2020
androidx.navigation:navigation-*:2.3.0-alpha04
משוחרר. גרסה 2.3.0-alpha04 מכילה את ההצהרות האלה.
תכונות חדשות
- הוספנו תמיכה בפעילות של מודול תכונה וביעדים של קטעי קוד ב-Navigation Kotlin DSL. (b/148969800)
שינויים ב-API
- בכיתה
DynamicExtras
כבר לא נעשה שימוש בתבנית build, ועכשיו אפשר ליצור אותה ישירות. (aosp/1253671) - עכשיו ה-constructor של
DynamicActivityNavigator
מקבלContext
במקוםActivity
. (aosp/1250252)
תיקוני באגים
NavigationUI
כבר לא מתעלם מתויות ריקות (כלומר, יעד עםandroid:label=””
), והוא מגדיר עכשיו את הכותרת כמחרוזת ריקה בצורה נכונה. (b/148679860)
עדכוני יחסי תלות
- הארטיפקטים של התכונות הדינמיות של הניווט תלויים עכשיו ב-Play Core
1.6.5
. (b/149556401)
גרסה 2.3.0-alpha03
4 במרץ 2020
androidx.navigation:navigation-*:2.3.0-alpha03
משוחרר. גרסה 2.3.0-alpha03 מכילה את ההוספות האלה.
שינויים ב-API
- במקום להסתמך על המחלקה הקונקרטית
DrawerLayout
,AppBarConfiguration
משתמש עכשיו בממשקOpenable
שהוצג ב-CustomView1.1.0-alpha02
(ש-DrawerLayout
מטמיע החל מ-DrawerLayout1.1.0-alpha04
), ומאפשר לכם להשתמש בהטמעות בהתאמה אישית שלOpenable
עםNavigationUI
. (b/129030452)
תיקוני באגים
- כללי ProGuard של
navigation-common-ktx
שומרים עכשיו בצורה נכונה רק את הכיתות שלNavArgs
שבהן נעשה שימוש, ולא את כל המופעים שלNavArgs
. (b/150213558)
שינויים ביחסי התלות
- המערכת הניווטית חזרה לשימוש ב-Core
1.2.0
, והיא תלויה עכשיו ב-Core1.1.0
כדי למנוע מהמפתחים לעבור לשימוש ביחסי תלות חדשים יותר, מאחר שהמערכת הניווטית לא תלויה בממשקי API חדשים ב-Core1.2.0
.
גרסה 2.3.0-alpha02
19 בפברואר 2020
androidx.navigation:navigation-*:2.3.0-alpha02
משוחרר. גרסה 2.3.0-alpha02 מכילה את ההוספות האלה.
תכונות חדשות
- עכשיו אפשר להשתמש ב-
NavBackStackEntry
כדי לגשת ל-SavedStateHandle
שמתאים לאחסון כמויות קטנות של מצב שמור שצריך לשייך לרשומה מסוימת ב-back stack. החזרת תוצאה – דוגמה לתרחיש לדוגמה. (b/79672220)
שינויים ב-API
- נוספו שיטות נוחות של
getCurrentBackStackEntry()
ו-getPreviousBackStackEntry()
כדי שיהיה קל יותר לאחזרNavBackStackEntry
ליעדים הנוכחיים והקודמים. (b/79672220)
תיקוני באגים
- כשמפעילים את האפליקציה בסטאק המשימות שלכם,
navigateUp()
מעביר עכשיו את הארגומנטים של היעד הנוכחי ואתKEY_DEEP_LINK_INTENT
ליעד הקודם. (b/147456890)
שינויים ביחסי התלות
- הניווט תלוי עכשיו ב-Core
1.2.0
.
גרסה 2.3.0-alpha01
5 בפברואר 2020
androidx.navigation:navigation-*:2.3.0-alpha01
משוחרר. גרסה 2.3.0-alpha01 מכילה את ההוספות האלה.
תכונות חדשות
- הארטיפקט החדש
navigation-testing
מספק את הכיתהTestNavHostController
. הכיתה הזו מספקת חלופה לשימוש ב-mock שלNavController
בזמן בדיקת הניווט, ומאפשרת להגדיר את היעד הנוכחי ולאמת את סטאק החזרה אחרי פעולות הניווט. (b/140884273) - המאפיין החדש
navigation-dynamic-features-fragment
(והתלות הטרנזיטיבית שלו,navigation-dynamic-features-runtime
) מאפשר לכלול יעדים או גרפי ניווט שלמים (דרך<include-dynamic>
) ממודולים של תכונות, ומספק התקנה חלקה של מודולים של תכונות על פי דרישה כשמנווטים ליעדים האלה. מידע נוסף זמין במאמר ניווט באמצעות מודולים של תכונות. (b/132170186)
תיקוני באגים
- מניווט
2.2.1
: קישורי עומק ללא פרמטרים של שאילתה מתעלמים עכשיו בצורה נכונה מכל פרמטר של שאילתה, במקום לצרף אותם לרכיבי{argument}
שבסוף או לא להתאים אותם לקישור העומק. (b/147447512) - מNavigation
2.2.1
: כללי ProGuard שלnavigation-ui
עבורDrawerArrowDrawable
עודכנו כדי להבטיח ש-android.enableJetifier=true
לא נדרש. (b/147610424) - מניווט
2.2.1
: למודולnavigation-common-ktx
יש עכשיו שם חבילה ייחודי של מניפסט, במקום לשתף את אותו שם חבילה של מניפסט כמוnavigation-runtime-ktx
. (aosp/1141947)
עדכוני יחסי תלות
- מ-Navigation
2.2.1
: Navigation2.2.1
תלוי עכשיו ב-Lifecycle ViewModel SavedState2.2.0
וב-Fragment1.2.1
.
גרסה 2.2.2
גרסה 2.2.2
15 באפריל 2020
androidx.navigation:navigation-*:2.2.2
משוחררים. גרסה 2.2.2 כוללת את ההוספות האלה.
תיקוני באגים
- תוקן שגיאה ב-
IllegalStateException
כשמקשרים לעומק ליעד ההתחלה של התרשים, אם יש כמה מופעים שלNavHostFragment
בפעילות. (b/147378752) NavigationUI
כבר לא מתעלם מתויות ריקות (כלומר, יעד עםandroid:label=””
), והוא מגדיר עכשיו את הכותרת כמחרוזת ריקה בצורה נכונה. התכונה הזו שוחררה בעבר ב-Navigation 2.3.0-alpha04. (b/148679860)- כללי ProGuard של
navigation-common-ktx
שומרים עכשיו בצורה נכונה רק את הכיתות שלNavArgs
שבהן נעשה שימוש, ולא את כל המופעים שלNavArgs
. התכונה הזו שוחררה בעבר ב-Navigation 2.3.0-alpha03. (b/150213558
עדכוני יחסי תלות
- הניווט תלוי עכשיו בקטע
1.2.4
. (aosp/1277325)
גרסה 2.2.1
גרסה 2.2.1
5 בפברואר 2020
androidx.navigation:navigation-*:2.2.1
משוחרר. גרסה 2.2.1 מכילה את ההוספות האלה.
תיקוני באגים
- קישורי עומק ללא פרמטרים של שאילתה מתעלמים עכשיו בצורה נכונה מכל פרמטר של שאילתה, במקום לצרף אותם לרכיבי
{argument}
שבסוף או לא להתאים את קישור העומק. (b/147447512) - כללי ProGuard של
navigation-ui
עבורDrawerArrowDrawable
עודכנו כדי לוודא ש-android.enableJetifier=true
לא נדרש. (b/147610424) - למעכשיו, למערכי הנתונים של המודול
navigation-common-ktx
יש שם חבילה ייחודי של מניפסט, במקום לשתף את שם החבילה של המניפסט עםnavigation-runtime-ktx
. (aosp/1141947)
עדכוני יחסי תלות
- הניווט
2.2.1
תלוי עכשיו ב-Lifecycle ViewModel SavedState2.2.0
וב-Fragment1.2.1
.
גרסה 2.2.0
גרסה 2.2.0
22 בינואר 2020
androidx.navigation:navigation-*:2.2.0
משוחרר. גרסה 2.2.0 כוללת את ההצהרות האלה.
שינויים חשובים מאז גרסה 2.1.0
- NavBackStackEntry: עכשיו אפשר להפעיל את
NavController.getBackStackEntry()
ולהעביר את המזהה של יעד או תרשים ניווט בסטאק העורפי. הערך המוחזר שלNavBackStackEntry
מספק את הערכיםLifecycleOwner
,ViewModelStoreOwner
(הערך שמוחזר על ידיNavController.getViewModelStoreOwner()
) ו-SavedStateRegistryOwner
שמבוססים על ניווט, בנוסף לארגומנטים ששימשו להפעלת היעד הזה. - שילוב של SavedState ב-Lifecycle ViewModel:
SavedStateViewModelFactory
הוא עכשיו המפעל שמוגדר כברירת מחדל כשמשתמשים ב-by navGraphViewModels()
או ב-constructorViewModelProvider
עםViewModelStoreOwner
שמוחזר על ידיNavController.getBackStackEntry()
אוNavController.getViewModelStoreOwner()
. - תמיכה בפרמטרים של שאילתות בקישורי עומק: עכשיו יש תמיכה בפרמטרים של שאילתות בקישורי עומק עם שינוי הסדר של הפרמטרים. עכשיו אפשר להשתמש בארגומנטים עם ערך ברירת מחדל או עם אפשרות ל-null כשמתבצעת התאמה של קישורי עומק.
- שיפור התמיכה באנימציה:
NavHostFragment
משתמש עכשיו ב-FragmentContainerView
מ-Fragment 1.2.0, ותוקנות בעיות שקשורות לסדר ה-Z של אנימציות ולשליחת חלונות משנה ל-Fragments.
גרסה 2.2.0-rc04
18 בדצמבר 2019
androidx.navigation:navigation-*:2.2.0-rc04
משוחרר. גרסה 2.2.0-rc04 כוללת את ההוספות האלה.
תיקוני באגים
- שינינו את אנימציות ברירת המחדל של העמעום שבהן משתמש
navigation-ui
כך שיתאיימו לאנימציות העמעום שהותאמו בקטע1.2.0-rc04
. (b/145769814)
גרסה 2.2.0-rc03
4 בדצמבר 2019
androidx.navigation:navigation-*:2.2.0-rc03
משוחרר. גרסה 2.2.0-rc03 מכילה את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה בניתוח של קישור עומק כשמשתמשים בפרמטרים של שאילתות ובארגומנט כחלק האחרון בנתיב, שגרמה לכך שלא ניתן היה לנתח יותר מתווים אחד של ארגומנט הנתיב הסופי. (b/144554689)
- תוקנה בעיה בניתוח של קישורי עומק, שבה פרמטרים אופציונליים קיבלו את הערך
"@null"
במקוםnull
. (b/141613546) NavHostFragment
משחזר עכשיו בצורה נכונה את הגרף אחרי שינוי בהגדרות, כשמשתמשים בו עםFragmentContainerView
. (b/143752103)
שינויים ביחסי התלות
- הניווט תלוי עכשיו ב-Lifecycle
2.2.0-rc03
, ב-Lifecycle ViewModel SavedState1.0.0-rc03
, ב-Activity1.1.0-rc03
וב-Fragment1.2.0-rc03
במקרים הרלוונטיים.
גרסה 2.2.0-rc02
7 בנובמבר 2019
androidx.navigation:navigation-*:2.2.0-rc02
משוחרר. גרסה 2.2.0-rc02 כוללת את ההוספות האלה.
שינויים ביחסי התלות
- הניווט תלוי עכשיו ב-androidx.lifecycle
2.2.0-rc02
.
גרסה 2.2.0-rc01
23 באוקטובר 2019
androidx.navigation:navigation-*:2.2.0-rc01
פורסם ללא שינויים מאז 2.2.0-beta01
. גרסה 2.2.0-rc01 כוללת את ההוספות האלה.
גרסה 2.2.0-beta01
9 באוקטובר 2019
androidx.navigation:navigation-*:2.2.0-beta01
משוחרר. גרסה 2.2.0-beta01 כוללת את ההצהרות האלה.
תכונות חדשות
NavDestination
ותתי-הסוגים שלו מבטלים עכשיו את הגדרתtoString()
כדי לספק מידע שימושי יותר במהלך ניפוי הבאגים. (b/141264986)
שינויים בהתנהגות
- עכשיו המערכת מתעלמת מפרמטרים נוספים של שאילתות כשמתבצעת התאמה לקישורי עומק, במקום לגרום לכשל בהתאמה. (b/141482822)
תיקוני באגים
- תוקנה בעיה שבה המערכת התעלמה מארגומנטים בנתיב של קישור עומק אם צוינו גם פרמטרים של שאילתות. (b/141505755)
- תוסף Kotlin
navArgs()
ב-Activity
כולל עכשיו הודעת שגיאה טובה יותר כשאין פריטים נוספים. (b/141408999) - כיתות Java מסוג
Directions
שנוצרו על ידי Safe Args מכילות ערכי ברירת מחדל. (b/141099045) - כיתות Java מסוג
Args
שנוצרו על ידי Safe Args מכילות ערכי ברירת מחדל. (b/140123727) - כשמשתמשים ב-
Toolbar
, ה-NavigationUI
כבר לא יוצר אנימציה של שינוי הטקסט כשעוברים בין שני יעדים ברמה העליונה. (b/140848160)
גרסה 2.2.0-alpha03
18 בספטמבר 2019
androidx.navigation:navigation-*:2.2.0-alpha03
משוחרר. גרסה 2.2.0-alpha03 מכילה את ההוספות האלה.
שינויים בהתנהגות
- אם מחייגים למספר
setViewModelStore()
אחרי שמחייגים למספרsetGraph
, מתקבלת עכשיו הודעתIllegalStateException
. תמיד צריך להגדיר את זה באמצעותNavHost
כחלק מההגדרה הראשונית, כדי לוודא שלכל המכונות שלNavBackStackEntry
יש אחסון עקבי למכונות שלViewModel
. (aosp/1111821)
תיקוני באגים
- תוקנה בעיה ב-
ConcurrentModificationException
כשמשתמשים במכונותViewModel
שמצורפות למספר מכונותViewModelStore
שונות ברמת תרשים הניווט. (aosp/1112257)
גרסה 2.2.0-alpha02
5 בספטמבר 2019
androidx.navigation:navigation-*:2.2.0-alpha02
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- קישורי עומק עם פרמטרים של שאילתות תומכים עכשיו בפרמטרים של שאילתות בסדר מחדש. ארגומנטים שיש להם ערך ברירת מחדל או שאפשר להקצות להם ערך null הם עכשיו אופציונליים כשמתבצעת התאמה של קישורי עומק. (b/133273839)
- עכשיו אפשר להפעיל את
NavController.getBackStackEntry()
ולהעביר את המזהה של יעד או תרשים ניווט בסטאק העורפי. הערך המוחזר שלNavBackStackEntry
מספק את הערכיםLifecycleOwner
,ViewModelStoreOwner
(הערך שמוחזר על ידיNavController.getViewModelStoreOwner()
) ו-SavedStateRegistryOwner
שמבוססים על ניווט, בנוסף לארגומנטים ששימשו להפעלת היעד הזה. (aosp/1101691, aosp/1101710)
תיקוני באגים
- תוקנה בעיה שבה הוספת
NavHostFragment
ל-ViewPager2
נכשלה עםIllegalArgumentException
. (b/133640271) NavInflater
לא קורא עכשיו ל-getResourceName()
ללא צורך, וכך מזרז את זמן הניפוח ב-40%. (b/139213740)
גרסה 2.2.0-alpha01
7 באוגוסט 2019
androidx.navigation:navigation-*:2.2.0-alpha01
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
SavedStateViewModelFactory
הוא עכשיו המפעל שמוגדר כברירת מחדל כשמשתמשים ב-by navGraphViewModels()
או ב-constructor שלViewModelProvider
עםViewModelStoreOwner
שמוחזר על ידיNavController.getViewModelStoreOwner()
. (b/135716331)
שינויים ב-API
- מניווט
2.1.0-rc01
: ממשק ה-APIgetViewModelStore()
שהוצא משימוש ב-NavController
והוצג ב-2.1.0-alpha02
הוסרה. (aosp/1091021)
תיקוני באגים
NavHostFragment
משתמש עכשיו ב-FragmentContainerView
, כדי לפתור בעיות שקשורות לסדר ה-Z של אנימציות ולשליחת חלונות משנה ל-Fragments. (b/137310379)
גרסה
גרסה
5 בספטמבר 2019
androidx.navigation:navigation-*:2.1.0
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים חשובים מאז גרסה 2.0.0
- הגדרת היקף של מודלים של ViewModels לתרשים ניווט: עכשיו אפשר ליצור מודלים של ViewModels ברמת התרשים של הניווט באמצעות מנהל הנכסים
by navGraphViewModels()
למשתמשי Kotlin באמצעות ספריות-ktx
או באמצעות ה-APIgetViewModelStoreOwner()
שנוסף ל-NavController
. מידע נוסף זמין במאמר שיתוף נתונים שקשורים לממשק המשתמש בין יעדים. - יעדים של תיבת דו-שיח: עכשיו אפשר ליצור יעדים מסוג
<dialog>
שיוצג בהםDialogFragment
כשnavigate
אליהם.NavHostFragment
תומך ביעדים של תיבת דו-שיח כברירת מחדל. מידע נוסף זמין במאמר יצירת יעד מ-DialogFragment. - ניווט לפי URI: עכשיו אפשר
navigate
באמצעותUri
, שמשתמש ב-<deepLink>
שהוספתם ליעד כדי לנווט אליו. מידע נוסף זמין במאמר ניווט באמצעות Uri. - NavHostController: ממשקי API ששימשו במיוחד ליצירת
NavHost
בהתאמה אישית הועברו אלNavHostController
, ומאפשרים להטמעות לחבר אתNavController
שלהן ל-LifecycleOwner
, ל-OnBackPressedDispatcher
ול-ViewModelStore
המארחים.
גרסה 2.1.0-rc01
7 באוגוסט 2019
androidx.navigation:navigation-*:2.1.0-rc01
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים ב-API
- ממשק ה-API
getViewModelStore()
שהוצא משימוש ב-NavController
והוצג ב-2.1.0-alpha02
הוסר. (aosp/1091021)
גרסה 2.1.0-beta02
19 ביולי 2019
androidx.navigation:*:2.1.0-beta02
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תיקוני באגים
- הסרה של תלות לא מכוונת ב-Jacoco שנוספה ב-
2.1.0-beta01
. (b/137782950)
גרסה 2.1.0-beta01
17 ביולי 2019
androidx.navigation:*:2.1.0-beta01
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
NavigationUI
מציג עכשיו אנימציה של הסרת לחצן למעלה כשמשתמשים ב-setupWithNavController()
עםToolbar
אוCollapsingToolbarLayout
. (b/131403621)
תיקוני באגים
- תוקנה בעיה שקשורת לתזמון כשמשתמשים בכמה NavHostFragments באותו מאגר באמצעות
findNavController()
. (b/136021571)
גרסה 2.1.0-alpha06
2 ביולי 2019
androidx.navigation:*:2.1.0-alpha06
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- המאפיין
app:navGraph
שמשמש את NavHostFragment הועבר עכשיו לארטיפקטnavigation-runtime
. כדי לשלב ניווט מותאם אישית שניתן להוסיף באמצעות XML עם חלונית המארח של עורך הניווט, צריך להשתמש במאפיין הזה. (b/133880955)
שינויים ב-API
- ממשק ה-API
getViewModelStore()
ב-NavController
הוצא משימוש לטובת השיטה החדשהgetViewModelStoreOwner()
שמחזירהViewModelStoreOwner
. (aosp/987010) - ההטמעה של יעדי חלון צף, כמו יעדים מסוג
<dialog>
, הוכללה בממשק סמן,FloatingWindow
, שכל יעדי<dialog>
מטמיעים עכשיו. שיטות NavigationUI לאינטראקציה עם שורת האפליקציות העליונה מתעלמות עכשיו מיעדים מסוגFloatingWindow
. (b/133600763)
שינויים בהתנהגות
- עכשיו המצב של הניווט מסתנכרן בצורה נכונה עם מה שמוצג במסך כשמשתמשים ביעד
<dialog>
. כתוצאה מכך, עכשיו מוצגים באופן אוטומטי יעדים מסוג<dialog>
כשמנווטים ליעד שאינו תיבת דו-שיח או פעילות, כמו יעד מסוג<fragment>
. (b/134089818)
תיקוני באגים
- התכונה 'ניווט' משביתה עכשיו את האנימציה שמופיעה כשנוצרת מחדש הפעילות במהלך טיפול בקישור עומק, וכך מתקנת את הבהוב החזותי. (b/130362979)
- תוקן באג שגרם לכך שסטאק החזרה לאחור של הניווט לא יסתנכרן כשמפעילים חלון קופץ של 'קטע' בזמן הוספת הקטע הראשוני. (b/133832218)
גרסה 2.1.0-alpha05
5 ביוני 2019
androidx.navigation:*:2.1.0-alpha05
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים ב-API
- שמות של ממשקי API שקשורים למארח ב-
NavController
שונו והם הועברו למחלקה משנית חדשה שלNavController
, NavHostController
. (aosp/966091) - השיטה
setHostOnBackPressedDispatcherOwner()
שלNavController
הוחלפה בשיטהsetOnBackPressedDispatcher()
שלNavHostController
, ועכשיו צריך לקרוא ל-setLifecycleOwner()
לפני שמפעילים אותה. (aosp/965409) NavHostController
מכיל עכשיו את השיטהenableOnBackPressed(boolean)
שמחליפה את הכיתהNavHostOnBackPressedManager
שהוחזר על ידיsetHostOnBackPressedDispatcherOwner()
בעבר. (aosp/966091)
תיקוני באגים
- תוקנה בעיה שבה סטאק החזרה לא היה נכון אחרי ניווט לפי URI. (b/132509387)
- קישורי עומק שמטופלים באופן אוטומטי על ידי NavController מופעלים עכשיו רק פעם אחת. (b/132754763)
גרסה 2.1.0-alpha04
16 במאי 2019
androidx.navigation:*:2.1.0-alpha04
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תיקוני באגים
NavHostFragment
מתייחס בצורה נכונה ל-app:defaultNavHost
כשמנתב את האירועים של לחצן החזרה אחורה במערכת, וכך מתקן נסיגה ב-Navigation2.1.0-alpha03
. b/132077777DialogFragmentNavigator
מטפל עכשיו כראוי בפעולותpopBackStack()
ו-navigateUp()
. b/132576764- תוקנה בעיה ב-
IllegalStateException: unknown destination during restore
במהלך ניווט חוזר ונשנה בין גרפים בתצוגת עץ. b/131733658
גרסה 2.1.0-alpha03
7 במאי 2019
androidx.navigation:*:2.1.0-alpha03
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
בעיות מוכרות
- NavHostFragment ממשיך ליירט את לחצן החזרה לדף הקודם של המערכת למרות השימוש ב-
app:defaultNavHost="false"
b/132077777
תכונות חדשות
- עכשיו אפשר ליצור יעדים מסוג
<dialog>
שיוצג בהםDialogFragment
כשnavigate
אליהם.NavHostFragment
תומך ביעדי תיבת דו-שיח כברירת מחדל. b/80267254 - בנוסף לקריאה ל-
navigate
עם מזהה משאב או מכונה שלNavDirections
, עכשיו אפשר לנווט באמצעותUri
, שמשתמש ב-<deepLink>
שהוספתם ליעד כדי לנווט ליעד הנכון. b/110412864
שינויים בהתנהגות
- מהירות האנימציות שמוגדרות כברירת מחדל ב-NavigationUI הוגדלה מ-400 אלפיות שנייה ל-220 אלפיות שנייה, כדי להתאים למהירות האנימציה שמוגדרת כברירת מחדל בפעילויות ובקטעים. b/130055522
שינויים ב-API
- השיטה
createFragmentNavigator()
שלNavHostFragment
הוצאה משימוש והפונקציונליות שלה הועברה לשיטה החדשהonCreateNavController()
כדי להבהיר שזו נקודת הכניסה הנכונה להוספת רכיבי Navigator בהתאמה אישית כשיוצרים צאצא שלNavHostFragment
. b/122802849 - הוספנו את השיטה
hasDeepLink()
ל-NavDestination
כדי לאפשר לכם לבדוק אם יעד מסוים יכול לטפל ב-Uri
נתון, או, במקרה שלNavGraph
, בכל יעד בתרשים הניווט. b/117437718
תיקוני באגים
- עכשיו, ארגומנטי ברירת המחדל מועברים בצורה נכונה למופעי
OnDestinationChangedListener
. b/130630686 NavHostFragment
עכשיו מיירט אירועי Back במערכת באמצעותOnBackPressedDispatcher
, וכך מתקן בעיה בביצוע ניווט מותנה בשיטות מחזור החיים של Fragment כשחוזרים ל-Fragment. b/111598096- ב-Safe Args, עכשיו אפשר להסיק בצורה נכונה ש-
android:defaultValue=”@null”
עםapp:argType
לא מוגדר הוא ארגומנטstring
. b/129629192
גרסה 2.1.0-alpha02
3 באפריל 2019
androidx.navigation:*:2.1.0-alpha02
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- עכשיו אפשר ליצור מודלים של ViewModel ברמת תרשים הניווט באמצעות נציג הנכס
by navGraphViewModels()
למשתמשים ב-Kotlin, או באמצעות ה-API שלgetViewModelStore()
שנוסף ל-NavController
. b/111614463
שינויים ב-API
- עכשיו אפשר להוסיף
app:targetPackage
ליעד<activity>
כדי להגביל את שם החבילה שתואמת. הוא תומך ב-app:targetPackage="${applicationId}"
כדי להגביל את החבילה למזהה האפליקציה שלכם. b/110975456
תיקוני באגים
- ה-
android:name
של יעדים מסוג<activity>
לא מנותח יותר ל-Class בזמן ההנפקה, וכך נמנעות הודעות ClassNotFoundExceptions כשמשתמשים בתכונות דינמיות. b/124538597
גרסה 2.1.0-alpha01
19 במרץ 2019
זוהי הגרסה הראשונה של Navigation 2.1.0
בגרסה אלפא.
שינויים ביחסי התלות
- הניווט תלוי עכשיו ב-
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)
כחלופה ליצירת מאזין קליקים עם מזהה משאב ו-Bundle.b/127631752 - האפשרות
FragmentNavigator.instantiateFragment
הוצאה משימוש. בהטמעת ברירת המחדל נעשה עכשיו שימוש ב-FragmentFactory
כדי ליצור אובייקטים של Fragments. b/119054429
תיקוני באגים
- הניווט לא שולח יותר ערך null של
Bundle
כשיש ארגומנטים שמצורפים ליעד. כך תוקנה בעיה בשימוש ב-android:defaultValue="@null"
. b/128531879 - Safe Args תלוי עכשיו ב-KotlinPoet 1.1.0, ותוקנה בעיה בשמות חבילות ארוכים במיוחד. b/123654948
גרסה 2.0.0
גרסה 2.0.0
14 במרץ 2019
גרסת 2.0.0
של הניווט פורסמת ללא שינויים מ-2.0.0-rc02
.
גרסה 2.0.0-rc02
6 במרץ 2019
ב-Navigation 2.0.0-rc02 יש ארטיפקטים חדשים עם מזהה הקבוצה androidx.navigation
, והוא משנה את יחסי התלות שלו למקבילים ב-AndroidX.
ההתנהגות של 2.0.0-rc02 זהה להתנהגות של Navigation 1.0.0-rc02, ולא אמורים להיות דרושים שינויים בקוד כדי לעדכן מגרסה 1.0.0-rc02, מלבד עדכון יחסי התלות כך שיתאימו ליחסי התלות החדשים.
כדי להשתמש בגרסאות 2.X של Navigation, צריך להעביר את הפרויקט ל-AndroidX. הגרסה היציבה 1.0 של Navigation תהיה הגרסה האחרונה שתשתמש ביחסי התלות של Support Library. כל הפיתוח העתידי אחרי גרסת 1.0 יתבסס על AndroidX וייבנה על גרסת 2.0 היציבה.
יחסי תלות מהתקופה שלפני AndroidX
בגרסאות של Navigation שקדמו ל-AndroidX, צריך לכלול את יחסי התלות הבאים:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
ל-Safe args, מוסיפים את classpath הבא בקובץ build.gradle
ברמה העליונה
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
גרסה 1.0.0
גרסה 1.0.0
14 במרץ 2019
גרסת 1.0.0
של הניווט פורסמת ללא שינויים מ-1.0.0-rc02
.
גרסה 1.0.0-rc02
26 בפברואר 2019
זוהי הגרסה המועמדת השנייה לגרסה היציבה 1.0.0 של Navigation. הגרסה הזו כוללת מספר תיקוני באגים.
תיקוני באגים
- תוקנה בעיה שבה
popBackStack()
היה מתעלם אם לתרשים הבסיס לא היה מזהה b/126251695 navigateUp()
מטפל עכשיו בצורה נכונה בניווט חזרה למשימה של האפליקציה כשמפעילים אותו אחרי טיפול בקישורי עומק בליFLAG_ACTIVITY_NEW_TASK
b/126082008- תוקנה בעיה ב-
ActivityNavigator.applyPopAnimationsToPendingTransition
שלא חלה עליה אנימציית היציאה הנכונה של חלון קופץ b/126237567 - קוד Kotlin שנוצר על ידי Safe Args עכשיו כולל בריחה נכונה של מילות מפתח ב-Kotlin, כמו
in
ו-fun
, בשם החבילה שמשויך לכיתהR
. b/126020455
גרסה 1.0.0-rc01
21 בפברואר 2019
זוהי גרסה מועמדת להפצה של הגרסה היציבה 1.0.0 של Navigation. הגרסה הזו כוללת תיקון באג אחד.
תיקוני באגים
- תוקנה בעיה בשימוש ב-Fragments ובפעולות ניווט מסוג
singleTop
b/124294805
גרסה 1.0.0-beta02
12 בפברואר 2019
הגרסה הזו כוללת מספר שיפורים קלים ותיקוני באגים חשובים.
תכונות חדשות
- עכשיו אפשר להשתמש ב-
0
כ-android:defaultValue
לארגומנטים שלreference
. b/124248602
שינויים בהתנהגות
- התאמות מדויקות של קישורי עומק מקבלות עכשיו עדיפות על פני קישורי עומק עם התאמות של
.*
או של ארגומנטים. b/123969518
תיקוני באגים
- הפונקציות
popBackStack()
ו-navigateUp
מחזירות עכשיו את הערךfalse
בצורה נכונה כשמבצעים pop של היעד האחרון ב-back stack, וכך מתקנים נסיגה לאחור (regression) שהופיעה ב-1.0.0-beta01
. b/123933201 - הניווט מגדיר עכשיו את
ClassLoader
בצורה נכונה במהלך שחזור המצב של המכונה השמורה, וכך נמנעות בעיות בשימוש בקטגוריות בהתאמה אישית במצב השמור שלNavigator
או בארגומנטים שנשלחים ל-NavDestination
. b/123893858 - כיתות NavArgs שנוצרו על ידי Safe Args לא קורסות יותר כשמשחזרים את הארגומנט
Parcelable[]
ממצב המכונה השמור. b/123963545 - Safe Args מנקה עכשיו כראוי כיתות Kotlin שנוצרו שלא נחוצות. b/124120883
גרסה 1.0.0-beta01
4 בפברואר 2019
זוהי גרסת הבטא הראשונה של Navigation. מעכשיו והלאה, Navigation 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
תיקוני באגים
- מעכשיו אפשר להשתמש ב-Safe Args בספריות ובמודולים של תכונות בכל הגרסאות של הפלאגין של Android Gradle. b/121304903
- תוקנה נסיגה שגרמה לכך שפעולת
popBackStack()
אחת תגרום להוצאה של כל העותק של יעד מסוים מהחלק העליון של סטאק החזרה, במקום רק יעד אחד בכל פעם. b/123552990 - תוקנה בעיה שבה המצב של
FragmentNavigator
יוצא מסנכרון עם המצב שלNavController
, וכתוצאה מכך מתרחשIllegalStateException
כשמנסים לשחזר את סטאק הקוד הקודם. b/123803044 - תוקנה בעיה שבה החץ לאחור המנוהל
NavigationUI
לא הופיע כשמשתמשים ב-ProGuard עם ערפול. b/123449431 - הקוד שנוצר על ידי Safe Args מטפל עכשיו כראוי בשימוש ב-
app:argType
שמפנה לכיתה פנימית סטטית בפורמט.OuterClass$InnerClass
. b/123736741 - קוד Java שנוצר על ידי Safe Args מטפל עכשיו כראוי בפעולות גלובליות וביעדים שמוטמעים לעומק. b/123347762
גרסה 1.0.0-alpha11
23 בינואר 2019
זוהי גרסה של תיקון חם ל-1.0.0-alpha10
שמתקנת בעיה ב-Safe Args.
תיקוני באגים
- תוקנה בעיה שבה Safe Args לא הצליח לייבא את הכיתה Directions המשויכת לפעולות גלובליות. b/123307342
גרסה 1.0.0-alpha10
23 בינואר 2019
בעיות מוכרות
- ל-Safe Args אין אפשרות לייבא את הכיתה Directions שמשויכת לפעולות גלובליות. b/123307342
הגרסה הזו כוללת שינויים ב-API שעלולים לגרום לכשל. תוכלו לקרוא על כך בקטע שינויים שעלולים לגרום לכשל שבהמשך.
תכונות חדשות
- משתמשי Kotlin יכולים עכשיו להשתמש ב-delegate של המאפיין
by navArgs()
כדי לקבל באופן עצלן הפניה לכיתהNavArgs
שנוצרה על ידי Safe Args ב-Activity
או ב-Fragment
. b/122603367 - עכשיו אפשר ליצור קוד Kotlin באמצעות Safe Args על ידי החלת הפלאגין
androidx.navigation.safeargs.kotlin
. קוד Kotlin נוצר במיוחד למודולים של Kotlin בלבד, באמצעות ארגומנטים שמוגדרים כברירת מחדל וכיתות שלא ניתן לשנות אותן, במקום דפוס ה-builder שעדיין זמין דרך הפלאגין הקודםandroidx.navigation.safeargs
. b/110263087
שינויים בהתנהגות
- קישורי עומק תואמים מוטים עכשיו לקישור העומק שיש לו את הכי הרבה ארגומנטים תואמים. b/118393029
- מעכשיו, קריאה ל-
setGraph()
ב-NavController
תאפס את סטאק החזרה. b/111450672 - קישורי עומק לא מוכרים כבר לא גורמים להצגת השגיאה
IllegalStateException
, אלא מתעלמים מהם. כך מתוקנות בעיות שקשורות ל-NavHostFragment
בתצוגת עץ או ל-NavHostFragment
ים מרובים. b/121340440
שינויים שעלולים לגרום לכשלים
- השיטה
NavOptions.applyPopAnimationsToPendingTransition()
להוספת אנימציות קופצות לפעילות הועברה ל-ActivityNavigator
. b/122413117 - Safe Args עכשיו מונע כפילויות של כיתות זהות לפעולות ללא ארגומנטים. סוג ההחזרה של שיטות ללא ארגומנטים בקטגוריות NavDirections שנוצרו הוא עכשיו
NavDirections
. b/123233147 - לכיתות Directions שנוצרו באמצעות Safe Args אין יותר קונסטרוקטור ציבורי – צריך לבצע אינטראקציה רק עם השיטות הסטטיות שנוצרו. b/123031660
- לכיתות
NavDirections
שנוצרו על ידי Safe Args כבר אין קונסטרוקטור ציבורי – צריך ליצור אותן רק באמצעות השיטות הסטטיות בכיתות Directions שנוצרו. b/122963206 - הערך
Bundle
שהוחזר מ-NavDirections
'getArguments()
מסומן עכשיו בתור@NonNull
במקום@Nullable
. b/123243957
תיקוני באגים
NavDeepLinkBuilder
מטפל עכשיו בצורה נכונה בכמה קריאותPendingIntent
בו-זמנית לאותו יעד, באמצעות הארגומנטים שאתם מעבירים כדי לקבוע את הייחודיות. b/120042732NavController
מטפל עכשיו כראוי בפעולותpopBackStack()
כשמשתמשים ב-NavHostFragment
בתצוגת עץ או ב-Fragments צאצאים אחרים עם סטאק אחורה. b/122770335NavigationUI
מגדיר עכשיו בצורה נכונה את תיאור התוכן של לחצן למעלה. b/120395362- שיעורי הדרכה שנוצרו באמצעות Safe Args מטפלים עכשיו בצורה נכונה בפעולות גלובליות שיש להן את אותו מזהה כמו פעולה ביעד. b/122962504
- לכיתות
NavDirections
שנוצרו על ידי Safe Args יש עכשיו ערכים שווים שלhashCode()
כאשרequals()
מחזירה את הערך true. b/123043662 FragmentNavigator
מחזירה עכשיו הודעת שגיאה טובה יותר אם מנסים לבצעFragmentTransactions
בהתאמה אישית ב-FragmentManager
שלNavHostFragment
. תמיד צריך להשתמש ב-getChildFragmentManager()
. b/112927148
גרסה 1.0.0-alpha09
18 בדצמבר 2018
הגרסה הזו כוללת שינויים ב-API שעלולים לגרום לכשל. תוכלו לקרוא על כך בקטע שינויים שעלולים לגרום לכשל שבהמשך.
החלטנו לא להמשיך את הפיתוח של הארטיפקט android.arch.navigation:navigation-testing
. הכלי הזה הוכיח את עצמו כשימושי לבדיקות פנימיות של NavController
, אבל מומלץ מאוד להשתמש בשיטות בדיקה חלופיות, כמו יצירת מודלים מדומים של מכונות NavController
כדי לוודא שמתבצעות הקריאות הנכונות ל-navigate()
. הגישה הזו מפורטת בהרצאה על פעילות אחת ב-AndroidDevSummit 2018, ואנחנו נעבד על תיעוד נוסף בנושא בדיקה באמצעות Navigation.
תכונות חדשות
MenuItem
עםmenuCategory="secondary"
לא יגרמו יותר להוצאה של הערך מהסטאק האחורי כשמשתמשים בשיטותNavigationUI
. b/120104424- עכשיו אפשר להגדיר ב-
AppBarConfiguration
מכונה חלופית שלOnNavigateUpListener
שתופעל כש-navController.navigateUp()
מחזירה את הערךfalse
. b/79993862 b/120690961
שינויים שעלולים לגרום לכשלים
- כשמשתמשים ב-
<argument>
עםargType="reference"
, מערכת הניווט כבר לא מפענחת את ההפניה, אלא מספקת את מזהה המשאב הגולמי עצמו. b/111736515 onNavDestinationSelected()
עכשיו חוזרת כברירת מחדל ליעד ההתחלה של תרשים הניווט, כדי שהיא תהיה עקבית עם השיטות שלsetup
. מוסיפים אתmenuCategory="secondary"
ל-MenuItem
כדי למנוע את הוצאת הסטאק הקודם. aosp/852869- השיטות
fromBundle()
של כיתותArgs
שנוצרו מקבלות עכשיוBundle
שאינו null במקוםBundle
שיכול להיות null aosp/845616
תיקוני באגים
- עכשיו אפשר לנתח את הארגומנטים כראוי מקישורי עומק כ-
argType
הנכון, במקום תמיד כמחרוזות b/110273284 - עכשיו אפשר לייצא את המשאבים הציבוריים של Navigation בצורה תקינה b/121059552
- Safe Args תואם עכשיו ל-Android Gradle Plugin 3.4 Canary 4 ואילך b/119662045
גרסה 1.0.0-alpha08
6 בדצמבר 2018
הגרסה הזו כוללת שינויים ב-API שעלולים לגרום לכשל. תוכלו לקרוא על כך בקטע שינויים שעלולים לגרום לכשל שבהמשך.
תכונות חדשות
- כשמשתמשים בתוויות יעד בשילוב עם שיטות
NavigationUI
, מעכשיו הן יחליפו באופן אוטומטי את המופעים של{argName}
ב-android:label
בארגומנט הנכון b/80267266 - הניווט תלוי עכשיו ב-Support Library 28.0.0 b/120293333
שינויים שעלולים לגרום לכשלים
- השם של
OnNavigatedListener
השתנה ל-OnDestinationChangedListener
b/118670572 OnDestinationChangedListener
מעביר עכשיו גם אתBundle
של הארגומנטים aosp/837142- המאפיינים
app:clearTask
ו-app:launchDocument
והשיטות המשויכות שלהם הוסרו. משתמשים ב-app:popUpTo
עם שורש התרשים כדי להסיר את כל היעדים מסטאק העורפי. b/119628354 ActivityNavigator.Extras
משתמש עכשיו בתבניתBuilder
ומוסיף את היכולת להגדיר את כל הדגלים שלIntent.FLAG_ACTIVITY_
aosp/828140- השם של
NavController.onHandleDeepLink
שונה ל-handleDeepLink
aosp/836063 - שיעורים ומתודות רבים שלא מיועדים ליצירת תת-סוגים, כמו
NavOptions
,NavInflater
,NavDeepLinkBuilder
ו-AppBarConfiguration
, הפכו ל-final
aosp/835681 - השיטה
NavHostFragment.setGraph()
הוצאה משימוש aosp/835684 - השיטה
NavigationUI.navigateUp(DrawerLayout, NavController)
הוצאה משימוש והוסרה. aosp/835684 - יצירת קטעי קוד הועברה אל
FragmentNavigator
, כך שקל יותר להעניק גישה ליצירת קטעי קוד ל-FragmentFactory
. b/119054429 - ה-constructor של
NavGraphNavigator
לא מקבל יותרContext
aosp/835340 - NavigatorProvider היא עכשיו מחלקה ולא ממשק. הפונקציה
NavigatorProvider
שמוחזרת על ידיgetNavigatorProvider()
לא השתנתה. aosp/830660 NavDestination.navigate()
הוסר. במקום זאת, צריך להתקשר למספרnavigate()
ב-Navigator
. aosp/830663- שיפור משמעותי של
Navigator
, ביטול הצורך ב-OnNavigatorNavigatedListener
ושינויnavigate
כך שיחזיר את ה-NavDestination
שאליו מנווטים. - מכונות
Navigator
לא יכולות יותר לשלוח אירועי קופץ ל-NavController
. מומלץ להשתמש ב-OnBackPressedCallback
כדי ליירט לחיצות על הלחצן 'הקודם' ולבצע קריאה ל-navController.popBackStack()
. aosp/833716
תיקוני באגים
popUpTo
פועל עכשיו באופן עקבי כשהיעד הוא רכיב<navigation>
b/116831650- תוקנו מספר באגים שגרמו לשגיאה
IllegalArgumentException
כשמשתמשים בגרפים בתצוגת עץ b/118713731 b/113611083 b/113346925 b/113305559 - מאפיין
dataPattern
של יעדים מסוג<activity>
יאכלס עכשיו ארגומנטים מארגומנטים שאינם מחרוזות באמצעות קריאה ל-toString()
b/120161365
Safe Args
- Safe Args תומך באובייקטים מסוג Serializable, כולל ערכי Enum. אפשר להגדיר ערך ברירת מחדל לסוגי enum באמצעות ליצ'ר של המנייה (enum) ללא שם הכיתה (למשל
app:defaultValue="READ"
) b/111316353 - Safe Args תומך במערכים של כל הסוגים הנתמכים b/111487504
- Safe Args מתעלם עכשיו מתיקיות משנה של ספריות משאבים b/117893516
- Safe Args מוסיף הערות
@Override
במקרים הרלוונטיים b/117145301
גרסה 1.0.0-alpha07
29 באוקטובר 2018
תכונות חדשות
- הכיתה החדשה AppBarConfiguration מאפשרת לכם להתאים אישית את היעדים שנחשבים ליעדים ברמה העליונה. פרטים נוספים זמינים במסמכי התיעוד המעודכנים. b/117333663
- עכשיו אפשר להעביר ארגומנטים ליעד ההתחלה של התרשים b/110300470
- עכשיו אפשר להשתמש בסמלים של נקודה, מקף וסימן פלוס בסכמות בהתאמה אישית של קישורי עומק. b/112806402
שינויים שעלולים לגרום לכשלים
- המודול
navigation-testing-ktx
צורף למודולnavigation-testing artifact
ולא יפורסם יותר. - לארטיפקט
navigation-testing
יש עכשיו תלות בספרייה הרגילה של Kotlin. ה-API השתנה כדי להתאים יותר למוסכמות של Kotlin, אבל אפשר להמשיך להשתמש בו לבדיקות שנכתבות ב-Java. - אין יותר תמיכה בתרשים ניווט רשום במניפסט של מטא-נתונים. b/118355937
- לא ניתן יותר לצרף פעולות ליעדים מסוג <activity>. aosp/785539
תיקוני באגים
- קישורי עומק מפענחים עכשיו בצורה נכונה את פרמטרים של שאילתות. b/110057514
- עכשיו כל האנימציות של הכניסה והיציאה חלות בצורה נכונה על יעדים של פעילויות. b/117145284
- תוקנה קריסה שמתרחשת אחרי שינויים בתצורה כשמשתמשים ב-Navigators מותאמים אישית. b/110763345
Safe Args
- עכשיו יש ל-Safe args תלות קבועה ב-Android Gradle Plugin 3.2.1. b/113167627
- עכשיו אפשר ליצור מסלולי הגעה לכיתות פנימיות. b/117407555
- תוקנה בעיה ביצירת מסלול לגרף <include>. b/116542123
גרסה 1.0.0-alpha06
20 בספטמבר 2018
תכונות חדשות
- עכשיו יש תמיכה במעברים של רכיבים משותפים ליעדים מסוג Fragment ו-Activity b/79665225. מידע נוסף זמין במאמר הטמעת ניווט באמצעות הרכיב של ארכיטקטורת הניווט
- בחירה של פריט ב-
NavigationView
תסגור עכשיו כל גיליון תחתון שמכיל אותו b/112158843
שינויים ב-API
- שינוי שעלול להפר את התאימות לאחור: השיטה
navigate()
של Navigator כוללת עכשיו פרמטרNavigator.Extras
. - השיטה
getGraph()
של NavController היא עכשיוNonNull
b/112243286
תיקוני באגים
NavigationUI.setupWithNavController()
לא חושף יותר צפיות אם משתמשים בו עם צפיות מיעדים ספציפיים b/111961977- Navigator
onSaveState()
נקרא עכשיו רק פעם אחת b/112627079
Safe Args
- כעת, כיתות של מסלולי הגעה ליעד בניווט מרחיבות את הכיתה של מסלול הגעה של ההורה, אם היא קיימת b/79871405
- לכיתות Directions ו-Args יש עכשיו הטמעה שימושית של
toString()
b/111843389
גרסה 1.0.0-alpha05
10 באוגוסט 2018
תיקוני באגים
- תוקן באג שגרם להתנהגות שגויה של backstack. b/111907708
- תיקון באג ב-
equals()
של כיתות Generated Args. b/111450897 - תיקון כשל build ב-Safe Args. b/109409713
- תיקון המרה ממזהי משאבים לשמות Java b/111602491
- תיקון הודעות שגיאה לגבי יכולת השימוש ב-null בפלאגין Safe Args.
- הוספת הערות חסרות לגבי יכולת השימוש באפס.
גרסה 1.0.0-alpha04
19 ביולי 2018
התכונה Navigation 1.0.0-alpha04
והפלאגין המשויך של Safe Args ל-Gradle מכילים מספר שינויים ב-API, שינויים בהתנהגות ותיקוני באגים.
שינויים ב-API או בהתנהגות
- NavHostFragment תמיד מגדיר את ה-Fragment הנוכחי כ-Fragment הניווט הראשי, כדי לוודא שמנהלי ה-Fragment הצאצאים יופעלו לפני שמנהל ה-NavController החיצוני יופעל b/111345778
Safe Args
- שינוי תוכנה שעלול לגרום לכשלים: השם
app:type
השתנה ל-app:argType
כדי למנוע התנגשויות עם ספריות אחרות, כמו ConstraintLayout 2.0.0-alpha1 b/111110548 - עכשיו אפשר ללחוץ על הודעות השגיאה מ-Safe Args b/111534438
- בכיתות Args מוודאים עכשיו שמאפייני
NonNull
הם לא null b/111451769 - נוספו הערות
NonNull
לכיתות שנוצרו על ידי NavDirections ו-Args b/111455455 b/111455456
תיקוני באגים
- תוקנה בעיה בלחצן 'הקודם' במערכת אחרי קישור עמוק ליעד של קטע קוד b/111515685
גרסה 1.0.0-alpha03
12 ביולי 2018
התכונה Navigation 1.0.0-alpha03
והפלאגין המשויך של Safe Args ל-Gradle מכילים מספר שינויים ב-API, שינויים בהתנהגות ותיקוני באגים.
שינויים ב-API או בהתנהגות
- נוספה שיטת NavigationUI.setupWithNavController לסרגל הכלים b/109868820
- נוספה שיטת NavigationUI.setupWithNavController ל-CollapsingToolbarLayout b/110887183
- הפונקציה popBackStack() מחזירה עכשיו את הערך false כשמקבץ ההיסטוריה הריק או כשמזהה היעד שצוין לא נמצא במקבץ ההיסטוריה b/110893637
- FragmentNavigator מתעלם עכשיו מפעולות ניווט אחרי ש-FragmentManager שומר את המצב, כדי למנוע חריגות מסוג 'לא ניתן לבצע את הפעולה הזו אחרי onSaveInstanceState' b/110987825
Safe Args
- שינוי שגורם לשבירה של תאימות לגרסאות קודמות: תווים לא אלפאנומריים בשמות של פעולות ושל ארגומנטים יוחלפו באותיות רישיות באותיות רישיות קטנות בשמות של השיטות הרלוונטיות של NavDirections
- לדוגמה,
DemoController.index
יהפוך ל-setDemoControllerIndex
b/79995048 - לדוגמה,
action_show_settings
יהפוך ל-actionShowSettings
b/79642240
- לדוגמה,
- שינוי שפוגע בתאימות לאחור: עכשיו, הארגומנטים נחשבים כערכים שאינם null כברירת מחדל. כדי לאפשר ערכי null בארגומנטים מסוג מחרוזת ו-Parcelable, מוסיפים את
app:nullable="true"
b/79642307 - עכשיו אפשר להשתמש ב-
app:type="long"
עם ערכי ברירת מחדל בפורמט '123L' b/79563966 - מעכשיו יש תמיכה בארגומנטים של Parcelable, באמצעות שם מחלקה מלא ל-
app:type
. ערך ברירת המחדל היחיד שנתמך הוא"@null"
b/79563966 - מעכשיו, כיתות Args מיישמות את
equals()
ו-hashCode()
b/79642246 - מעכשיו אפשר להחיל את הפלאגין Safe Args על פרויקטים של ספריות b/80036553
- עכשיו אפשר להחיל את הפלאגין Safe Args על פרויקטים של תכונות b/110011752
תיקוני באגים
- תוקנו בעיות בניווט במהלך שיטות מחזור החיים של Fragment b/109916080
- תוקנו בעיות בניווט בגרפים בתצוגת עץ כמה פעמים b/110178671
- תוקנו בעיות שקשורות לשימוש ב-
setPopUpTo
עם היעד הראשון בתרשים b/109909461 - תוקנה בעיה שבה כל הערכים של
app:defaultValue
הועברו כמחרוזות b/110710788 - aapt2 שצורף לפלאגין Android Gradle 3.2 Beta 01 מוסיף עכשיו כללי שמירה לכל מאפיין
android:name
בקובצי XML של ניווט b/79874119 - תוקנה דליפת זיכרון בהחלפת FragmentNavigator שמוגדר כברירת מחדל b/110900142
גרסה 1.0.0-alpha02
7 ביוני 2018
שינויים בהתנהגות
המכשיר
FragmentNavigator
משתמש עכשיו ב-setReorderingAllowed(true)
. b/109826220התכונה 'ניווט' מבצעת עכשיו פענוח של ארגומנטים שמנותחים מכתובות URL של קישורי עומק. b/79982454
תיקוני באגים
תוקנה שגיאת
IllegalStateException
בקריאה ל-navigate בשיטות של מחזור החיים של Fragment. b/79632233הניווט תלוי עכשיו ב-Support Library 27.1.1 כדי לתקן את האירועים של הבהוב כשמשתמשים באנימציות. b/80160903
תוקן שגיאה מסוג
IllegalArgumentException
כשמשתמשים ב-defaultNavHost="true" כקטע צאצא. b/79656847תוקן באג ב-
StackOverflowError
במהלך שימוש ב-NavDeepLinkBuilder. b/109653065תוקן באג ב-
IllegalArgumentException
כשמנווטים חזרה לתרשים בתצוגת עץ. b/80453447תוקנה בעיה עם קטעי Fragment חופפים בזמן השימוש ב-
launchSingleTop
. b/79407969מערכת הניווט יוצרת עכשיו את סטאק החזרה הסינתטי הנכון לתרשים בתצוגת עץ. b/79734195
מעכשיו, NavigationUI תדגיש את הפריט הנכון כשמשתמשים בגרף בתצוגת עץ בתור
MenuItem
. b/109675998
שינויים ב-API
המאפיין
clearTask
של פעולות וממשק ה-API המשויך ב-NavOptions
הוצאו משימוש. b/80338878המאפיין
launchDocument
של פעולות וממשק ה-API המשויך ב-NavOptions
הוצאו משימוש. b/109806636
גרסה 1.0.0-alpha01
8 במאי 2018
ניווט מספק מסגרת ליצירת ניווט באפליקציה. הגרסה הראשונית היא 1.0.0-alpha01
.