navigationevent
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
27 באוגוסט 2025 | - | - | - | 1.0.0-alpha07 |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-navigationevent, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle
של האפליקציה או המודול:
גרוב
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha07" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha07") }
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-Build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.
אין הערות לגבי הגרסה של הארטיפקט הזה.
גירסה 1.0
גרסה 1.0.0-alpha07
27 באוגוסט 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha07
משוחרר. גרסה 1.0.0-alpha07 מכילה את הקומטים האלה.
שינויים ב-API
- הסרה של
NavigationEventDispatcher.onHasEnabledCallbacksChanged
. (I50e97) - הפיכת
NavigationEventCallback.onEventCompleted()
למופשט. (I36b38) - משנים את השיטות
NavigationEventCallback#on*
לשיטותprotected
. מעדכנים את קוד החיוג כדי לבטל את ההגדרות האלה. (I6b691) - שינוי השם של פונקציות
DirectNavigationEventInput
. (Iffb62) - שינוי השם של
NavigationEventInput.onAttach
לonAdded
. (I2d0b8) - שינוי השם של
NavigationEventInput.onDetach
לonRemoved
. (I2d0b8) - שינוי השם של
NavigationEventInputHandler
לNavigationEventInput
. (I676a4) - הוספת
@EmptySuper
אלNavigationEventInput.onHasEnabledCallbacksChanged
. (If9853) - הטמעה של
onAttach
ב-NavigationEventInputHandler
. (I03648) - הטמעה של
onDetach
ב-NavigationEventInputHandler
. (I03648) - ברירת המחדל היא
NavigationEventCallback
מופעלת בזמן היצירה. (Ic0188) - מחליפים את
NavigationEventInput.addOnHasEnabledCallbacksChangedCallback
ב-NavigationEventInput.onHasEnabledCallbacksChanged
. (I64e93) - נדרש ה-thread הראשי למשך
NavigationEventDispatcher.addInput
. (Ic2930) - נדרש ה-thread הראשי למשך
NavigationEventDispatcher.removeInput
. (Ic2930) - הסרה של
Dispatcher.addOnHasEnabledCallbacksChangedCallback
. החלפה ב-Dispatcher.onHasEnabledCallbacksChanged
. (Ida3e3, b/436530096)
תיקוני באגים
- תוקן באג שבו הוספה של handler שכבר צורף או הסרה של handler שלא צורף הפעילו לוגיקה שגויה של מחזור החיים. (I9e47b)
גרסה 1.0.0-alpha06
13 באוגוסט 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06
משוחרר. גרסה 1.0.0-alpha06 מכילה את הקומטים האלה.
תכונות חדשות
Passive Listeners API
עכשיו אפשר להעביר מידע הקשרי מותאם אישית מכל מארח ניווט ולהאזין באופן פסיבי לשינויים במצב של תנועות מכל מקום בממשק המשתמש. ההגדרה הזו מפעילה אנימציות מבוססות-הקשר לחיזוי של תנועת החזרה ולניווט אחר שמבוסס על תנועות.
התכונה הזו כוללת שני חלקים:
- העברת מידע – אפשר להשתמש ב-
NavigationEventInfo
כדי להעביר נתונים בהתאמה אישית. - Consuming State – משתמשים ב-
dispatcher.state
(NavigationEventState
) כדי לראות את ההתקדמות של תנועת היד ואת ההקשר שלה.
-
NavigationEventCallback
עכשיו חושף את השיטהsetInfo(currentInfo, previousInfo)
להגדרת הקשר של תנועות במגע בשיחה אחת (I1d5e7, b/424470518). -
NavigationEventHandler
מוסיף עומס יתר חדש שמקבל אתcurrentInfo
ואתpreviousInfo
, מה שהופך אותו ל-API הראשי לאספקת הקשר באפליקציות Compose (I6ecd3, b/424470518).
דוגמה:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
-
NavigationEventDispatcher
חושף עכשיו אתdispatcher.state
ואתdispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518). ממשקי ה-API האלה שמבוססים עלStateFlow
מאפשרים לכל ממשק משתמש לעקוב אחרי התקדמות של תנועות ונתונים הקשריים בלי לטפל באירוע באופן ישיר.
דוגמה:
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
הוספת נכס
progress
אלNavigationEventState
(I7b196) שמחזירlatestEvent.progress
אם הוא בתהליך, או0F
אחרת:val progress = state.progress
מוסיפים
NavigationEventDispatcherOwner
composable כדי ליצור, לקשר ולסלק מופעים שלNavigationEventDispatcher
באופן היררכי. הפעלה של שליטה דינמית במצב המופעל של כלי השליחה וניקוי אוטומטי.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
שינויים ב-API
- הפרמטר
isPassthrough
הוסר מה-NavigationEventCallback
. (I99028, b/424470518) - הקונסטרוקטורים
NavigationEventState
הם עכשיו פנימיים. לצורך בדיקה, מעדכנים את הסטטוס (ברירת המחדל היאIdle
) באמצעותDirectNavigationEventInputHandler
. מתקשרים אלhandleOnStarted
או אלhandleOnProgressed
כדי להגדיר את המצב ל-InProgress
, ואלhandleOnCompleted
או אלhandleOnCancelled
כדי להחזיר אותו ל-Idle
. כדי לעדכן אתNavigationEventInfo
, צריך להשתמש בNavigationEventCallback.setInfo
. (I93dca, b/424470518) - נוספו פרמטרים שמוגדרים כברירת מחדל ל-
NavigationEvent
כדי להקל על יצירת מופעים ולפשט את הבדיקות. צריך להשתמש בהם במקום ב-TestNavigationEvent
. (I5dc49, I232f4) - נוסף
TestNavigationEventCallback
לבדיקת אירועי ניווט עם מצבים ספציפיים נוכחיים או קודמים. (Idd22e, b/424470518) - הפכנו את
NavigationEventInputHandler
למחלקה מופשטת כדי להחליף אתAbstractNavigationEventInputHandler
הקודמת בהטמעה ב-DirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924) - הקידומות של הפונקציות
send*
ב-NavigationEventInputHandler
שונו ל-handle*
. (Iffcaf) -
OnBackInvokedInputHandler
abstract
NavigationInputHandler
. (Ib45aa) - השתנה
NavigationEventDispatcherOwner
כך שנדרש מפיץ ראשי שבו צריך להעביר במפורש אתnull
כדי ליצור מפיץ בסיס. (Ia6f64, b/431534103)
תיקוני באגים
- שיפור היעילות על ידי מניעת העתקה של קולקציות ב-
NavigationEventDispatcher.dispose()
. (I4ab09) - תוקנה בעיה שבה
NavigationEventHandler
לא הגיב בצורה נכונה לשינויים במצב המופעל שלו. (Ia5268,I19bec, I5be5c, b/431534103)
עדכונים ב-Docs
- המסמכים של KDocs עבור
NavigationEvent
הורחבו כדי להבהיר את התפקיד שלו כעטיפת אירועים מאוחדת ואת התנהגות מאפייני הפרטים בסוגי ניווט שונים (מחוות, קליקים). (I91e8d) - עדכנו את מאמרי העזרה של ממשקי ה-API של Compose לטיפול בחזרה למערכת (
BackHandler
, PredictiveBackHandler
, NavigationEventHandler
) כדי להסביר את ההתנהגות באופן ספציפי לגבי סדר ההתקשרות חזרה. (I7ab94, )
עדכון תלות
-
NavigationEvent
תלוי עכשיו ב-Compose Runtime 1.9.0-beta03, שמאפשר לארטיפקטnavigationevent-compose
לתמוך בכל יעדי KMP. (Ia1b87)
גרסה 1.0.0-alpha05
30 ביולי 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05
משוחרר. גרסה 1.0.0-alpha05 מכילה את הקומטים האלה.
תמיכה בהיררכיה של הורה-צאצא:
ל-NavigationEventDispatcher
יכולים להיות עכשיו מרכזי ניהול הורים וצאצאים, שיוצרים מבנה עץ היררכי. האפשרות הזו מאפשרת לאירועי ניווט להתפשט ולנוהל בצורה גמישה יותר ברכיבי ממשק משתמש מורכבים של Compose, על ידי שיקוף ההיררכיה המבנית של ממשק המשתמש באמצעות משגרים משורשרים. (I194ac)
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
המאפיין ההיררכי isEnabled
מאפשר שליטה במפיץ מלמעלה למטה. אם המדיניות isEnabled
מוגדרת כ-false
במרכז בקרה, היא משביתה אוטומטית את כל מרכזי הבקרה שנגזרים ממנו. התכונה הזו מאפשרת להשבית ביעילות ענפים שלמים של מערכת אירועי הניווט. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
בנוסף, המאפיין isEnabled
ב-NavigationEventCallback
פועל עכשיו בהתאם למצב ההפעלה של רכיב השליחה המשויך. כלומר, קריאה חוזרת נחשבת למופעלת רק אם גם הקריאה החוזרת עצמה וגם רכיב השליחה שלה (כולל הרכיבים שמעליה בהיררכיה) מופעלים. כך מובטח ניהול היררכי עקבי של הפעלת הקריאה החוזרת. (I1799a)
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
הוספנו שיטה חדשה dispose()
לניקוי נכון של רכיבי Dispatcher ורכיבי הצאצא שלהם. הקריאה ל-dispose()
מפסיקה את המאזינים כדי למנוע דליפות זיכרון, משחררת באופן רקורסיבי את כל רכיבי ה-dispatcher של הצאצא, מסירה את כל הקריאות החוזרות שרשומות ב-dispatcher ומבטלת את הקישור שלו לרכיב האב. כך תוכלו לוודא שהמשאבים ישוחררו בצורה נכונה כשאין יותר צורך בצוותי השטח. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
אם קוראים לשיטה ציבורית כלשהי ב-dispatcher שהוצא משימוש, מתקבלת מיד שגיאת IllegalStateException
. כך אפשר למנוע כשלים שקורים בלי התראה ולעזור למפתחים לזהות שימוש לא תקין במהלך הפיתוח. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
הערה: אנחנו נציג NavigationEventDispatcherOwner
רכיב חדש שאפשר להרכיב ממנו ממשק משתמש, שמנהל באופן אוטומטי את ה-dispatcher של הצאצא בממשק המשתמש של Compose ב-aosp/3692572. עם זאת, השינוי הזה לא נכלל בגרסה הנוכחית, והוא מתוכנן לגרסה הבאה.
Navigation Testing Library
- הוספת מודול
navigationevent-testing
כדי לספק כלי בדיקה ייעודיים לספרייתnavigationevent
. (0e50b6) - הוספת מחלקת כלי עזר פיקטיבית
TestNavigationEventCallback
לבדיקה. הוא מתעד קריאות לשיטת קריאה חוזרת ומאחסן פריטים שהתקבלוNavigationEvent
כדי לתמוך באימות. (4a0246) - הוספתי פונקציית כלי פיקטיבית
TestNavigationEvent
כדי ליצור מופעים שלNavigationEvent
עם ערכי ברירת מחדל, וכך לפשט את בדיקות היחידה לעיבוד אירועי ניווט. (3b63f5) - הוספת מחלקת כלי עזר פיקטיבית
TestNavigationEventDispatcherOwner
לבדיקה. הוא עוקב אחרי מספרים של אירועים של חזרה למצב הקודם ושל שינוי מצב ההפעלה, כדי לתמוך באימות אינטראקציות בבדיקות. (c8753e)
שינויים ב-API
- מעבירים את
NavigationEventInputHandler
מ-androidMain
אלcommonMain
כדי שיהיה זמין בקוד המשותף של KMP. הוספתpublic send*
שיטות חדשות לשליחת אירועים. שינוי פונקציות השליחה ב-NavigationEventDispatcher
מ-public
ל-internal
; המשתמשים צריכים עכשיו להשתמש ב-NavigationEventInputHandler
כדי לשלוח אירועים. (Ia7114) - שינוי השם של
NavigationInputHandler
לOnBackInvokedInputHandler
. (I63405)
תיקוני באגים
- מבצעים רפקטורינג של
NavigationEventDispatcher
כדי לצמצם את התקורה על ידי הימנעות מהקצאות של רשימות ביניים ושיפור הביצועים של שליחת קריאות חוזרות. (I82702, I1a9d9) - הוספת הערות
@FloatRange
לשדותtouchX
,touchY
ו-progress
ב-NavigationEvent
כדי לאכוף טווחים של ערכים תקינים בזמן ההידור ולשפר את הבטיחות של ה-API. (Iac0ec)
גרסה 1.0.0-alpha04
2 ביולי 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את הקומטים האלה.
תיקוני באגים
- השתמשתי ב-
implementedInJetBrainsFork
כדיnavigationevent-compose
והוספתי יעדcommonStubs
בהתאם למוסכמות של Compose. שינוי שבוקש על ידי JetBrains. (f60c79) - בוצע תיקון של היישום של התוסף של מהדר Compose ל-Kotlin/Native כדי להבטיח יצירה נכונה של קובצי stub. אין השפעה על ממשקי API ציבוריים או על אופן הפעולה שלהם. (1890c9)
גרסה 1.0.0-alpha03
18 ביוני 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03
משוחרר. גרסה 1.0.0-alpha03 מכילה את הקומטים האלה.
תכונות חדשות
- הוספנו מודול
navigationevent-compose
חדש לתמיכה בתכונות של Jetpack Compose בספרייתnavigationevent
. (980d78) NavigationEvent
נוספה ל'יצירה'LocalNavigationEventDispatcherOwner
יצירה מקומית חדשה. היא מחזירה ערך שניתן להגדיר כ-null כדי לקבוע טוב יותר אם היא זמינה בקומפוזיציה הנוכחית. מעכשיו, אם הבעלים הבסיסי לא יימצא, תופיע שגיאה ב-NavigationEventHandler
. (62ffda)NavigationEvent
נוסףNavigationEventHandler
Composable חדש ל-Compose כדי לטפל באירועים (תנועת חזרה עם חיזוי). היא מספקתFlow
שלNavigationEvent
אובייקטים שצריך לאסוף בפונקציית ה-lambda להשעיה שסיפקת c42ba6:
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
שינויים ב-API
- כל
NavigationEventCallback
יכול להיות רשום רק אצלNavigationEventDispatcher
אחד בכל פעם. אם מוסיפים אותו לכמה משלחים, מוצגתIllegalStateException
. שימו לב שההתנהגות הזו שונה מOnBackPressedDispatcher
, שמאפשרת שימוש בכמה מעבירים. (e82c19) - הפכנו את
isPassThrough
ל-val
כדי למנוע מוטציה במהלך הניווט, שיכולה לשבש את השליחה שלNavigationEvent
. (I0b287)
גרסה 1.0.0-alpha02
4 ביוני 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את ההתחייבויות האלה.
שינויים ב-API
- מחליפים את בנאי המשנה של
NavigationEventDispatcher
בארגומנטים שמוגדרים כברירת מחדל. (I716a0) - הסרת מאפיין העדיפות מהמאפיין
NavigationEventCallback
. במקום זאת, מעבירים את העדיפות אלNavigationEventDispatcher.addCallback()
. (I13cae)
תיקוני באגים
- תוקנה בעיה
ConcurrentModificationException
שיכולה לקרות כשמתבצעת קריאה ל-NavigationEventCallback.remove()
בגלל שינוי בו-זמני של הרשימה הפנימית של רכיבים שניתן לסגור. (b/420919815)
גרסה 1.0.0-alpha01
20 במאי 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha01
משוחרר. גרסה 1.0.0-alpha01 מכילה את הקומטים האלה.
תכונות חדשות
- ספריית
androidx.navigationevent
מספקת API שמתמקד ב-KMP לטיפול בחזרה למערכת, וגם בחזרה עם חיזוי. NavigationEventDispatcher
משמש כממשקי API משותפים לרישום של מופע אחד או יותר שלNavigationEventCallback
לקבלת אירועים של חזרה למערכת. - השכבה הזו נמצאת מתחת לממשקי ה-API שפורסמו בעבר ב-
androidx.activity
, והיא נועדה להיות תחליף פחות דעתני לשימוש בממשקי ה-API של Activity ברכיבים ברמה גבוהה יותר או לשימוש ישיר בממשקי ה-API של Android frameworkOnBackInvokedDispatcher
. ממשקי ה-API שלandroidx.activity
נכתבו מחדש על בסיס ממשקי ה-API של אירועי הניווט כחלק מ-Activity 1.12.0-alpha01.