ניווט

‫Navigation הוא framework לניווט בין 'יעדים' באפליקציה ל-Android, שמספק API עקבי בין אם היעדים מיושמים כ-Fragments, כ-Activities או כרכיבים אחרים.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫23 בספטמבר 2026 ‫2.10.2 - - -

הצהרה על יחסי תלות

כדי להוסיף תלות ב-Navigation, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.

אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.10.2"

  // 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"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.10.2"

  // 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")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

Safe Args

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

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

מידע על שימוש בתוספים של Kotlin זמין במסמכי העזרה של ktx.

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לדעת אם גיליתם בעיות חדשות או אם יש לכם רעיונות איך לשפר את הספרייה הזו. כדאי לעיין בבעיות הידועות בספרייה הזו לפני שמדווחים על בעיה. כדי להוסיף הצבעה בדיווח על בעיה קיימת, לוחצים על כפתור הכוכב.

יצירת דיווח על בעיה חדשה

מידע נוסף זמין במאמרי העזרה בנושא Issue Tracker.

גרסה 2.10.2

‫23 בספטמבר 2026

‫androidx.navigation:navigation-*:2.10.2 מופץ. גרסה ‎2.10.2 מכילה את השמירות האלה.

עדכונים של יחסי תלות

  • יחסי התלות של androidx.lifecycle עודכנו לגרסה 2.10.0. I4505a9f9a

גרסה 2.10.1

‫9 בספטמבר 2026

‫androidx.navigation:navigation-*:2.10.1 מופץ. גרסה 2.10.1 מכילה את השמירות האלה.

תיקוני באגים

  • במקרים שבהם NavHost מדלג על אנימציות, הוא גם יתייחס עכשיו לsizeTransform כחלק מהאנימציה שדילג עליה, כדי למנוע חיתוך לא צפוי. ‫(I4f995, ‏ b/550924680)

גרסה 2.10.0

‫26 באוגוסט 2026

‫androidx.navigation:navigation-*:2.10.0 מופץ. גרסה 2.10.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.9.0:

  • ‫NavHost כולל עכשיו עומס יתר שמקבל פרמטרים של predictivePopEnterTransition ו-predictivePopExitTransition כדי לאפשר מעבר מותאם אישית במהלך תנועת החזרה החזויה.
  • הקוד handleDeepLink שונה כדי להבטיח שרק קישורי עומק מוכרים יטופלו, ושהמערכת תתעלם מכל השאר. אם הפעולה הזו גורמת לשגיאה באפליקציה, כדאי לשקול לעבור לניווט באמצעות קישורי עומק שמוגדרים בתרשים הניווט. בבדיקות Robolectric, יכול להיות שתצטרכו להשתמש בשיטה setPackage כדי לארוז חבילה מהימנה.
  • המאפיין NavBackStackEntryInfo נוסף כדי לחשוף תמונות מצב של מקבץ פעילויות קודמות (back stack) במהלך אירועי ניווט. ההגדרה הזו מאפשרת אנימציות עשירות יותר של חיזוי החזרה בהתאמה אישית.

תמיכה נוספת בפלטפורמה

  • מודולים navigation-common,‏ navigation-runtime ו-navigation-testing נוספו לתמיכה ב-desktop,‏ linux,‏ macOS,‏ iOS,‏ javascript,‏ WASM,‏ watchos ו-tvos.

גרסה ‎2.10.0-rc01

‫12 באוגוסט 2026

‫androidx.navigation:navigation-*:2.10.0-rc01 מופץ. גרסה ‎2.10.0-rc01 מכילה את השמירות האלה.

שינויים בהתנהגות

  • גרסת ה-SDK המינימלית ל-Navigation הועברה ל-API 24 יחד עם שאר הספריות של AndroidX. (I972da, ‏ b/474169350)

גרסה ‎2.10.0-beta01

‫29 ביולי 2026

‫androidx.navigation:navigation-*:2.10.0-beta01 מופץ. גרסה ‎2.10.0-beta01 מכילה את השמירות האלה.

שינויים ב-API

  • הוספנו את NavBackStackEntryInfo כדי לחשוף תמונות מצב של מחסנית הקריאות במהלך אירועי ניווט. כך אפשר להפעיל אנימציות עשירות יותר של חיזוי החזרה. (Icb3b8)

גרסה ‎2.10.0-alpha06

‫1 ביולי 2026

‫androidx.navigation:navigation-*:2.10.0-alpha06 מופץ. גרסה ‎2.10.0-alpha06 מכילה את השמירות האלה.

תיקוני באגים

  • בוצעו שינויים ב-handleDeepLink כדי להבטיח שרק קישורי עומק מוכרים יטופלו (Id4fe3, ‏ b/509640056)
  • הפונקציה ComposableFragment שונתה כך שהיא משתמשת בשם המלא מהיעד במקום בארגומנט של קטע כדי להרחיב פונקציות קומפוזביליות. (I65ded, ‏ b/509640586)
  • תוקנה קריסה ב-FragmentNavigator שגרמה ל-Fragments לגיטימיים להציג IllegalArgumentException כשמבצעים אופטימיזציה של פעולות. (I093b0, b/340202276)
  • תוקנה שגיאה ב-Navigation with Fragments שבה הגדרת הגרף באופן פרוגרמטי לא שוחזרה כמו שצריך. (I41251, ‏ b/321147435)

גרסה ‎2.10.0-alpha05

‫19 במאי 2026

‫androidx.navigation:navigation-*:2.10.0-alpha05 מופץ. גרסה ‎2.10.0-alpha05 מכילה את השמירות האלה.

גרסה ‎2.10.0-alpha04

‫6 במאי 2026

‫androidx.navigation:navigation-*:2.10.0-alpha04 מופץ. גרסה ‎2.10.0-alpha04 מכילה את השמירות האלה.

תיקוני באגים

  • שיפור NavHost כדי לחזק את ההגנה מפני אפשרויות NullPointerException שנגרמות בגלל מרוץ תהליכים עם חיזוי החזרה. (Ie36c6, b/500945998)

גרסה ‎2.10.0-alpha03

‫22 באפריל 2026

‫androidx.navigation:navigation-*:2.10.0-alpha03 מופץ. גרסה ‎2.10.0-alpha03 מכילה את השמירות האלה.

תיקוני באגים

  • עדכון של Compose compileSdk ל-API 37. כלומר, כשמשתמשים ב-Compose, נדרשת גרסת AGP מינימלית של 9.2.0. ‫(Id45cd, ‏ b/413674743)

External Contribution

  • נוספו יעדים watchos ו-tvos למודולים navigation-common, navigation-runtime ו-navigation-testing (I60e46)
  • הגדרת הגישה ל-DefaultNavTransitions כציבורית (Ide293)

גרסה ‎2.10.0-alpha02

‫25 במרץ 2026

‫androidx.navigation:navigation-*:2.10.0-alpha02 מופץ. גרסה ‎2.10.0-alpha02 מכילה את השמירות האלה.

גרסה ‎2.10.0-alpha01

‫11 במרץ 2026

‫androidx.navigation:navigation-*:2.10.0-alpha01 מופץ. גרסה ‎2.10.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • ‫NavHost כולל עכשיו עומס יתר שמקבל פרמטרים של predictivePopEnterTransition ו-predictivePopExitTransition כדי לאפשר מעבר מותאם אישית במהלך תנועת החזרה החזויה. (Iac9b0, b/478294569)

עדכון מינימלי של SDK

External Contribution

  • ‫navigation:navigation-common,‏ navigation:navigation-runtime ו-navigation:navigation-testing תומכים עכשיו ב-desktop,‏ Linux,‏ macOS,‏ iOS,‏ JavaScript ו-WASM בנוסף ל-Android. תודה לקונסטנטין צ'וברובוב!(I035d9, Iec624, I1615d)

גרסה 2.9

גרסה 2.9.8

‫22 באפריל 2026

‫androidx.navigation:navigation-*:2.9.8 מופץ. גרסה 2.9.8 מכילה את השמירות האלה.

תיקוני באגים

  • שיפרנו את NavHost כדי לחזק את ההגנה מפני NullPointerException אפשריים שנגרמים בגלל מרוץ תהליכים עם חיזוי החזרה. (Ie36c6, ‏ b/500945998)

גרסה 2.9.7

‫28 בינואר 2026

‫androidx.navigation:navigation-*:2.9.7 מופץ. גרסה 2.9.7 מכילה את השמירות האלה.

תיקוני באגים

  • בניווט SafeArgs אין יותר בעיות של שמירת הגדרות במטמון כשמשתמשים בו עם שירותי Google. (I57cda, ‏ b/458071608)
  • תוקן הבונה של הבדיקה SavedStateHandle בבדיקת הניווט שלא פענח את List<String>. (I26aac,b/454180135)

גרסה 2.9.6

‫5 בנובמבר 2025

‫androidx.navigation:navigation-*:2.9.6 מופץ. גרסה 2.9.6 מכילה את השמירות האלה.

תיקוני באגים

  • הפלאגין Navigation SafeArgs הועבר לממשקי API מודרניים של פלאגין של Android Gradle, וכך אמורה להיות לו תאימות לכל הגרסאות של AGP 8.4.2 ואילך. בעקבות השינויים האלה, ספריית הפלט של קבצים שנוצרו על ידי התוסף השתנתה למיקום ברירת המחדל שסופק על ידי AGP. (Ie09d6, I7c431, b/203559535, b/293920476, b/269532448, b/443261197)
  • התוסף Navigation SafeArgs לא יצריך יותר הגדרה של המאפיין useAndroidX כשמשתמשים בו עם AGP בגרסה 9.0.0-alpha04 ואילך. (I6c3a4, ‏ b/444746731, ‏ b/443106400)

גרסה 2.9.5

‫24 בספטמבר 2025

‫androidx.navigation:navigation-*:2.9.5 מופץ. גרסה 2.9.5 מכילה את השמירות האלה.

תיקוני באגים

  • ‫Navigation Safe Args יכול עכשיו לטפל בתמיכה של AGP 9.0 ב-kotlin מובנה. (I1d9d76)

עדכון תלות

  • הפלאגין Navigation Safe Args תלוי עכשיו בגרסה 8.4.2 של פלאגין של Android Gradle. (b/431847270, I5932a)

גרסה 2.9.4

‫10 בספטמבר 2025

‫androidx.navigation:navigation-*:2.9.4 מופץ. גרסה 2.9.4 מכילה את השמירות האלה.

תיקוני באגים

  • מניעת קריסה כשאירוע של חזרה עם חיזוי מועבר באמצע פריים אחרי שהגורם המטפל הושבת במעבר NavHost. (I5667c, b/384186542)

גרסה 2.9.3

‫30 ביולי 2025

‫androidx.navigation:navigation-*:2.9.3 מופץ. גרסה 2.9.3 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה שגיאה ב-NavController שגרמה ל-ConcurrentModificationException כשנעשה שימוש ב-OnDestinationChangedListeners. ‫(If7406, ‏ b/417784831)
  • תוקנה שגיאה בשימוש ב-navigate(uri, navOptions,navigationExtras) שבה התוספים לא נלקחו בחשבון. (I67fb7, ‏ b/430336813)

גרסה 2.9.2

‫16 ביולי 2025

‫androidx.navigation:navigation-*:2.9.2 מופץ. גרסה 2.9.2 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שגרמה לכך שההזנה לא המשיכה כשתיבת הדו-שיח שמעל ההזנה נסגרה (Idb20e, b/418746335)
  • תוקנה השגיאה MissingFieldException כשבודקים את SavedStateHandle עם מסלולים בטוחים לסוגים בזמן השימוש ב-NavTypes בהתאמה אישית. (I2f843, b/421002511)

גרסה 2.9.1

‫2 ביולי 2025

‫androidx.navigation:navigation-*:2.9.1 מופץ. גרסה 2.9.1 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שגרמה לכך ש-NavEntries שהופעלו באמצעות single top לא עברו אף פעם את השלב CREATED ב-Lifecycle.State שלהם. (I043ba, ‏ b/421095236)

גרסה 2.9.0

‫7 במאי 2025

‫androidx.navigation:navigation-*:2.9.0 מופץ. גרסה 2.9.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.8.0

  • פעולות של Navigation Safe Args נוצרות עכשיו עם ההערה @CheckResult כדי לוודא שהן בשימוש.

ממשק SupportingPane

  • מעכשיו, רכיבי Custom Navigator יכולים לסמן את היעדים שלהם ככאלה שמטמיעים את הממשק SupportingPane, שמציין לרכיב NavController שהיעדים האלה יוצגו לצד יעדים אחרים. לדוגמה, אפשר להשתמש בממשק הזה כדי RESUMED כמה יעדים בו-זמנית.

‫Compose Kotlin Multiplatform

  • בניווט יש עכשיו פונקציה חדשה משותפת NavController.handleDeepLink() שמקבלת NavDeepLinkRequest במקום Intent. כך פלטפורמות שאינן Android יכולות לטפל בקישורי עומק בצורה תקינה. תודה, קונסטנטין צ'חוברוב!
  • התכונה 'ניווט' כוללת עכשיו את NavUri, פונקציית מנתח חדשה משותפת שהיא API תואם ל-URI של Android בפלטפורמות אחרות. כך אפשר ליצור URI באופן שלא תלוי בפלטפורמה. תודה, קונסטנטין צ'חוברוב!

פונקציות בטוחות לטיפוס

  • ממשקי ה-API הבטוחים לטיפוסים, שבעבר הייתה אליהם גישה רק באמצעות שיטות reified, כלומר: ל-composable<YourScreen> יש עכשיו גרסאות לא מוחשיות שמקבלות ישירות מופע של KClass.
  • מניעת שגיאות הקלדה בניווט תומכת עכשיו במחלקות ערכים כנתיב או כסוג הארגומנט של נתיב.

גרסה ‎2.9.0-rc01

‫23 באפריל 2025

‫androidx.navigation:navigation-*:2.9.0-rc01 מופץ. גרסה ‎2.9.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • הוסרו מ-Jetpack Navigation כל היעדים של פלטפורמות שאינן Android, כי היעדים האלה לא פועלים בפועל. במקום זאת, מסופקים עכשיו קובצי stub לפלטפורמות שונות.(I2877d)

גרסה ‎2.9.0-beta01

‫9 באפריל 2025

‫androidx.navigation:navigation-*:2.9.0-beta01 מופץ. גרסה ‎2.9.0-beta01 מכילה את השמירות האלה.

שינויים ב-API

  • ה-API המשותף של parseStringAsNavUri השתנה לפונקציית factory של NavUri שמקבלת מחרוזת. ‫(I4db6e, ‏ b/403616316)

עדכונים של יחסי תלות

  • הספרייה הזו מטרגטת עכשיו את רמת השפה Kotlin 2.0 ונדרשת KGP 2.0.0 או גרסה חדשה יותר. (Idb6b5)

גרסה ‎2.9.0-alpha09

‫26 במרץ 2025

‫androidx.navigation:navigation-*:2.9.0-alpha09 מופץ. גרסה ‎2.9.0-alpha09 מכילה את השמירות האלה.

תכונות חדשות

  • מודול navigation-testing תומך עכשיו במחשבים, ב-Linux, ב-macOS וב-iOS, בנוסף ל-Android. (I2b770, b/398265336)
  • מעכשיו יש תמיכה ב-NavType במחשבים, ב-Linux, ב-macOS וב-iOS, בנוסף ל-Android. (I297d8)

גרסה ‎2.9.0-alpha08

‫12 במרץ 2025

‫androidx.navigation:navigation-*:2.9.0-alpha08 מופץ. גרסה ‎2.9.0-alpha08 מכילה את השמירות האלה.

תיקוני באגים

  • מתוך Navigation 2.8.9: תוקנה רגרסיה שנמצאה ב-Navigation 2.8.8, שדרשה שקישור עומק יתאים בדיוק לכל השדות של בקשת קישור עומק או של Intent כדי להיחשב כהתאמה. כתוצאה מכך, קישורי עומק שהכילו התאמות חלקיות לשדות ולא הכילו התאמות אחרות לא פעלו יותר. (Ie5e36, b/399826566)

External Contribution

  • פונקציית ניתוח נפוצה חדשה ליצירת NavUri. תודה, Konstantin Tskhovrebov! (If0a6a)

גרסה ‎2.9.0-alpha07

‫26 בפברואר 2025

‫androidx.navigation:navigation-*:2.9.0-alpha07 מופץ. גרסה ‎2.9.0-alpha07 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שבה ניסיון להשתמש ב-saveState עם חלון קופץ לא כולל גרם ל-savedState ריק, שיכול היה לגרום לקריסה בשחזור. ‫(I9f3e8, b/395091644)
  • מגרסה Navigation 2.8.8: תוקנה בעיה בהתאמה של NavDeepLink, שבה קישור עומק ובקשה לקישור עומק צריכים להיות זהים בדיוק ב-URI, בפעולה וב-MIME. אם רק שדה אחד או שניים תואמים, אי אפשר יותר לבצע התאמה. ‫(I3b029, ‏ b/395712033)
  • ‫Navigation 2.8.8: תוקן באג שבו מסלולים עם נתיבי wildcard לא תואמים לקישור עומק שנוסף (I7ea92, ‏ b/389970341)

External Contribution

  • הוצאת ממשקי API נפוצים של Navigation,‏ Navigation-runtime ו-Navigation-compose לפלטפורמה הנפוצה. תודה, קונסטנטין צ'חוברוב! (I1e626, ‏ Ica76f, ‏ Idf479)

בעיות מוכרות

  • בגלל העבודה לטיפול בבעיה b/395712033, קישורי עומק נדרשים באופן שגוי לכלול את כל השדות שכלולים בבקשה לקישור עומק או ב-Intent. קישורים עמוקים צריכים להתאים רק לשדות שהם מכילים, והמערכת צריכה להתעלם משדות שלא נכללים בהם. הבעיה הזו תוקנה בגרסה מאוחרת יותר כחלק מ-b/399826566.

גרסה ‎2.9.0-alpha06

‫12 בפברואר 2025

‫androidx.navigation:navigation-*:2.9.0-alpha06 מופץ. גרסה ‎2.9.0-alpha06 מכילה את השמירות האלה.

תכונות חדשות

  • פעולות של Navigation Safe Args נוצרות עכשיו עם ההערה @CheckResult כדי לוודא שהן בשימוש. ‫(I14d4c, ‏ b/356323084)

תיקוני באגים

  • תוקנה שגיאה ב-NavController שבה המערכת ניסתה לשחזר באופן שגוי את מצבי ה-backStack למערך, כשבעצם הם נשמרו ברשימה. (Idfb9b)
  • מ-Navigation 2.8.7: ‏Navigation Safe Args תומך עכשיו ביעדים שניתן להרכיב. (I35320, b/362791955)

גרסה ‎2.9.0-alpha05

‫29 בינואר 2025

‫androidx.navigation:navigation-*:2.9.0-alpha05 מופץ. גרסה ‎2.9.0-alpha05 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שגרמה לאנימציית שינוי גודל לא צפויה כשנעשה שימוש ב-Navigation Compose. ‫(I480f4, ‏ b/353294030)
  • מתוך Navigation 2.8.6: התוויות NavDestination שסופקו באמצעות XML ינותחו באמצעות NavType.get כדי לוודא שהלוגיקה המותאמת אישית של NavType נשמרת. ‫(I7ec2f, ‏ b/388100796)
  • מתוך Navigation 2.8.6: כשמנווטים לפעילות עם dataPattern, ‏ActivityNavigator ינסה עכשיו לקודד את ערך הארגומנט באמצעות NavType של הארגומנט. (I16376, b/383616432)
  • מתוך Navigation 2.8.5: תוקנה בעיה שגרמה לאנימציית שינוי קנה מידה לא צפויה כשמשתמשים ב-Navigation Compose ומפעילים את הפונקציה navigate באותו פריים שבו האנימציה הנוכחית מסתיימת. (I26cb1, b/353294030)

גרסה ‎2.9.0-alpha04

‫11 בדצמבר 2024

‫androidx.navigation:navigation-*:2.9.0-alpha04 מופץ. גרסה ‎2.9.0-alpha04 מכילה את השמירות האלה.

תכונות חדשות

בטבלה הבאה מפורטים ממשקי ה-API של reified ו-KClass.

מוחשי KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

שינויים ב-API

  • העומס העודף NavGraph.setStartDestination הספציפי ל-Kotlin לצורך מניעת שגיאות הקלדה מוסתר ממקורות Java. (Ic640c, ‏ b/364634035)

תיקוני באגים

  • מתוך Navigation 2.8.5: תוקנה בעיה שבה NavHost יכול להקפיץ הודעת שגיאה (throw) בתוך PredictiveBackHandler אם מקבץ פעילויות קודמות (back stack) מוקפץ לערך אחד ומופעלת חזרה למערכת באותו פריים. (I1a429, b/375343407)
  • מתוך ניווט 2.8.5: תוקן NavDestination NullPointerException בעדכון של startDestination של תרשים. (I99421, ‏ b/361560785)

External Contribution

  • מתוך Navigation 2.8.5: מניעת שגיאות הקלדה של סוג הניווט תומכת עכשיו ב-List<Enum> כסוג ארגומנט של מסלול בלי לדרוש NavType מותאם אישית. תודה Csaba Kozák! (GH-725, ‏ b/375559962)

גרסה ‎2.9.0-alpha03

‫13 בנובמבר 2024

‫androidx.navigation:navigation-*:2.9.0-alpha03 מופץ. גרסה ‎2.9.0-alpha03 מכילה את השמירות האלה.

תכונות חדשות

  • מניעת שגיאות הקלדה בניווט תומכת עכשיו במחלקות ערכים כנתיב או כסוג הארגומנט של נתיב. (I9344a, ‏ b/374347483)

תיקוני באגים

  • תוקן באג ConcurrentModificationException שיכול לקרות כש-LifecycleObserver שמצורף ל-NavBackStackEntry מפעיל שינוי במקבץ פעילויות קודמות (back stack) כש-LifecycleOwner המארח, כמו Activity או Fragment שמכילים אותו, משנה את מצב מחזור החיים שלו. (Ia9494)

גרסה ‎2.9.0-alpha02

‫30 באוקטובר 2024

‫androidx.navigation:navigation-*:2.9.0-alpha02 מופץ. גרסה ‎2.9.0-alpha02 מכילה את השמירות האלה.

External Contribution

  • שיטה חדשה משותפת NavController.handleDeepLink(request: NavDeepLinkRequest). תודה, קונסטנטין צ'חוברוב! (I3e228)

גרסה ‎2.9.0-alpha01

‫16 באוקטובר 2024

‫androidx.navigation:navigation-*:2.9.0-alpha01 מופץ. גרסה ‎2.9.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • מעכשיו, רכיבי Custom Navigator יכולים לסמן את היעדים שלהם ככאלה שמטמיעים את הממשק SupportingPane, שמציין לרכיב NavController שהיעדים האלה יוצגו לצד יעדים אחרים. לדוגמה, אפשר להשתמש בממשק הזה כדי RESUMED כמה יעדים בו-זמנית. (Id5559)
  • מתוך ניווט 2.8.3: נוספו בדיקות חדשות של lint למודולים navigation-common,‏ navigation-runtime ו-navigation-compose כדי לעזור לזהות מסלולים בטוחים מבחינת טיפוס שלא נוסף להם הערה בצורה נכונה עם @Serializable. הבדיקה הזו מתבצעת על כל הפונקציות של התוספים NavGraphBuilder ו-NavDeepLinkBuilder. (I4a259, ‏ I95402, ‏ Ie601a, ‏ Id8c6e, ‏ I28bda, ‏ b/362725816)
  • בקטע ניווט 2.8.3: הוספנו בדיקות חדשות של lint למודולים 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 (לא נמצאה מחלקת Enum) כדי להציע שימוש בהערה @Keep במקרה שמחלקת Enum נמחקת בגרסאות מצומצמות. (I90e79, ‏ b/358137294)

בעיות מוכרות

  • יש בעיה בכללי lint החדשים שנוספו בגרסה Navigation 2.8.* שגורמת לשגיאה Obsolete custom lint check כשמנסים להריץ lint עם פלאגין של Android Gradle בגרסה 8.4 ואילך. (b/368070326, ‏ b/371463741)

גרסה 2.8

גרסה 2.8.9

‫12 במרץ 2025

‫androidx.navigation:navigation-*:2.8.9 מופץ. גרסה 2.8.9 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה רגרסיה שנמצאה בניווט 2.8.8, שדרשה שקישור עומק יתאים בדיוק לכל השדות של בקשת קישור עומק או של Intent כדי להיחשב כהתאמה. כתוצאה מכך, קישורי עומק שהכילו התאמות חלקיות לשדות ולא הכילו התאמות אחרות לא פעלו יותר. (Ie5e36, ‏ b/399826566)

גרסה 2.8.8

‫26 בפברואר 2025

‫androidx.navigation:navigation-*:2.8.8 מופץ. גרסה 2.8.8 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן באג שגרם לכך שמסלולים עם נתיבים שכוללים תו כללי לחיפוש לא התאימו לקישור עמוק שנוסף. (I7ea92, ‏ b/389970341)
  • תוקנה בעיה בהתאמה של NavDeepLink, שבה קישור עומק ובקשה לקישור עומק צריכים להיות זהים בדיוק ב-URI, בפעולה וב-MIME. אם יש התאמה רק בשדה אחד או בשני שדות, אי אפשר יותר לבצע התאמה. ‫(I3227f, ‏ b/395712033)

בעיות מוכרות

  • בגלל העבודה לטיפול בבעיה b/395712033, קישורי עומק נדרשים באופן שגוי לכלול את כל השדות כמו בקשת קישור העומק ו/או Intent. קישורים עמוקים צריכים להתאים רק לשדות שהם מכילים, והמערכת צריכה להתעלם משדות שלא נכללים בהם. הבעיה הזו תוקנה בגרסה מאוחרת יותר כחלק מ-b/399826566.

גרסה 2.8.7

‫12 בפברואר 2025

‫androidx.navigation:navigation-*:2.8.7 מופץ. גרסה 2.8.7 מכילה את השמירות האלה.

תיקוני באגים

  • התכונה Navigation Safe Args תומכת עכשיו ביעדים שניתנים להרכבה. (I35320, b/362791955)

גרסה 2.8.6

‫29 בינואר 2025

‫androidx.navigation:navigation-*:2.8.6 מופץ. גרסה 2.8.6 מכילה את השמירות האלה.

תיקוני באגים

  • תוויות NavDestination שמועברות באמצעות XML ינותחו באמצעות NavType.get כדי לוודא שהלוגיקה המותאמת אישית של NavType נשמרת. (Id366d, b/388100796)
  • כשעוברים לפעילות עם dataPattern, ActivityNavigator ינסה עכשיו לקודד את ערך הארגומנט באמצעות NavType של הארגומנט. ‫(I1a71d, ‏ b/383616432)

גרסה 2.8.5

‫11 בדצמבר 2024

‫androidx.navigation:navigation-*:2.8.5 מופץ. גרסה 2.8.5 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שבה NavHost יכולה להקפיץ הודעת שגיאה (throw) בתוך PredictiveBackHandler אם מקבץ פעילויות קודמות (back stack) מוקטנת לערך אחד ומופעלת חזרה למערכת באותו פריים. (I1a429, b/375343407)
  • תוקנה בעיה ב-NavDestination NullPointerException בעדכון של startDestination בתרשים. (I99421, ‏ b/361560785)
  • תוקנה בעיה שגרמה לאנימציית שינוי גודל לא צפויה כשמשתמשים ב-Navigation Compose ומפעילים את הפונקציה navigate באותו פריים שבו האנימציה הנוכחית מסתיימת. (I26cb1, b/353294030)
  • תוקן באג ConcurrentModificationException שיכול לקרות כש-LifecycleObserver שמצורף ל-NavBackStackEntry מפעיל שינוי במקבץ פעילויות קודמות (back stack) כש-LifecycleOwner המארח, כמו Activity או Fragment שמכילים אותו, משנה את מצב מחזור החיים שלו. (Ia9494)

External Contribution

  • במניעת שגיאות הקלדה של ניווט יש עכשיו תמיכה ב-List<Enum> כסוג ארגומנט של מסלול בלי שנדרש NavType מותאם אישית. תודה Csaba Kozák! (GH-725, ‏ b/375559962)

גרסה 2.8.4

‫13 בנובמבר 2024

‫androidx.navigation:navigation-*:2.8.4 מופץ. גרסה 2.8.4 מכילה את השמירות האלה.

תכונות חדשות

  • בקטע Navigation 2.9.0-alpha03: מניעת שגיאות הקלדה בניווט תומכת עכשיו במחלקת ערך כמסלול או כסוג הארגומנט של מסלול (I9344a, ‏ b/374347483)

תיקוני באגים

גרסה 2.8.3

‫16 באוקטובר 2024

‫androidx.navigation:navigation-*:2.8.3 מופץ. גרסה 2.8.3 מכילה את השמירות האלה.

תכונות חדשות

  • הוספנו בדיקות חדשות של lint למודולים navigation-common,‏ navigation-runtime ו-navigation-compose כדי לעזור לזהות מסלולים בטוחים מבחינת סוגים שלא נוסף להם הערה בצורה נכונה עם @Serializable. הבדיקה הזו מתבצעת על כל הפונקציות של התוספים NavGraphBuilder ו-NavDeepLinkBuilder. (I4a259, ‏ I95402, ‏ Ie601a, ‏ Id8c6e, ‏ I28bda, ‏ b/362725816)
  • נוספו בדיקות חדשות של Lint למודולים navigation-common,‏ navigation-runtime ו-navigation-compose כדי לעזור לזהות מסלולים בטוחים מבחינת סוגים עם ארגומנטים של Enum שלא נוסף להם הערה בצורה נכונה באמצעות @Keep. הבדיקה הזו מתבצעת על כל הפונקציות של התוספים NavGraphBuilder ו-NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

תיקוני באגים

  • תוקנה בעיה שבה כללי ה-lint החדשים שנוספו בגרסה Navigation 2.8.* גרמו לשגיאה Obsolete custom lint check כשניסו להריץ lint עם פלאגין של Android Gradle בגרסה 8.4 ואילך. (I1be3d, ‏ b/368070326, ‏ b/371463741)

בעיות מוכרות

  • בניסיון להריץ lint עם Lint 16 ‏ (AGP 8.7) ואילך, יופיע שגיאת בדיקת lint מותאמת אישית שיצאה משימוש. (b/371926651)

גרסה 2.8.2

‫2 באוקטובר 2024

‫androidx.navigation:navigation-*:2.8.2 מופץ. גרסה 2.8.2 מכילה את השמירות האלה.

תכונות חדשות

  • התכונה 'בטיחות סוג הניווט' תומכת עכשיו במחלקות Serializable שכוללות Double,‏ Double?,‏ DoubleArray,‏ DoubleArray?,‏ List<Double> ו-List<Double>? בלי לדרוש NavType בהתאמה אישית. (I570eb, ‏ Ibc4c0, ‏ I37461, ‏ I5bed4, ‏ b/359245753)

תיקוני באגים

  • שיפרנו את הודעת השגיאה שמוצגת כשלא ניתן למפות ארגומנט של מסלול ל-NavType ב-Navigation. הודעת השגיאה החדשה תכלול את שם הארגומנט, את השם מוגדר במלואו של הארגומנט ואת השם מוגדר במלואו של המסלול. ‫(Id8416, ‏ b/346264232)

גרסה 2.8.1

‫18 בספטמבר 2024

‫androidx.navigation:navigation-*:2.8.1 מופץ. גרסה 2.8.1 מכילה את השמירות האלה.

תכונות חדשות

  • נוסף כלל חדש של lint כדי להבטיח שימוש בפונקציה popBackStack שמקבלת סוג מחלקה מוחשי כשמנסים להשתמש ב-popBackStack באמצעות ממשקי API בטוחים לסוגים. ‫(Ief161, ‏ b/358095343)

תיקוני באגים

  • כדי לנווט, צריך לוודא שהנתיב שמועבר ל-NavGraph של startDestination מכיל את הערכים של כל הארגומנטים הנדרשים, כולל ארגומנטים שהם non-nullable ואין להם ערך ברירת מחדל. (I18e74, b/362594265)
  • ב-Navigation safe args נוספה תמיכה במחרוזות שאינן ניתנות לאיפוס, כך שערכי null ינותחו ויאוחסנו בחבילה כמו שהם. זה שונה מההתנהגות הקיימת, שבה ערכי null מנותחים לאובייקט null. השינוי הזה חל רק על סוגי מחרוזות שלא יכולים להכיל ערך null. מחרוזות שאפשר להגדיר להן ערך 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

בטיחות סוגים ב-Kotlin DSL לניווט

  • הניווט מספק עכשיו בטיחות סוגים ל-Kotlin DSL (שמשמש את 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.

Navigation Compose Predictive Back

  • ‫Navigation Compose תומך עכשיו בחיזוי תנועת החזרה באפליקציה באמצעות ממשקי ה-API החדשים SeekableTransitionState מ-compose-animation. כך תוכלו להשתמש בתנועת החזרה כדי לראות את היעד הקודם עם המעבר המותאם אישית שלכם, לפני שתחליטו אם לאשר את העסקה באמצעות התנועה המלאה או לבטל אותה.

רכיב ה-Composable של Navigation Fragment

  • נוסף ארטיפקט 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 תלויה עכשיו בגרסה 1.7.0 של Compose.
  • הניווט מספק עכשיו מחלקה חדשה 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)
  • ‫Navigation 2.8 פועלת עכשיו בצורה תקינה עם 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 מותאמים אישית. שימו לב שהשם המוגדר במלואו של EnumSerialName חייב להיות שם ברירת המחדל. ‫(I66d22, ‏ b/346475493)
  • ב-Safe Args, הוספנו תמיכה מובנית בסוגים של ארגומנטים שניתן להגדיר כ-nullable, כולל Int?,‏ Long?,‏ Float?,‏ Boolean? ו-Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • הפונקציה NavGraph של startDestination תשתמש עכשיו בערכי ברירת המחדל של הארגומנט אם המסלול 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 בסוג המחלקה שהועבר, ולכן ה-lint לא זיהה את השגיאה. (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)
  • תוקנה בעיה ב-Navigation Compose שבה אחרי ביטול של חיזוי תנועת החזרה, ה-NavBackStackEntry שהמשתמש חוזר אליו אף פעם לא חוזר למצב מחזור החיים RESUMED. בנוסף, כך אפשר לוודא שהיעד שאליו חוזרים יחזור בצורה חלקה במקום לחזור בפתאומיות אחרי תנועת הדילוג. ‫(I97a0c, ‏ b/346608857)
  • כשמשתמשים בתכונה 'חזרה עם חיזוי' עם Navigation Compose, ליעד שמוצג עכשיו תהיה סדר ה-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. כשמנווטים עם null CollectionNavType, ארגומנט הפלט יהיה ערך ברירת המחדל שהוגדר במחלקה 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)
  • תוקנו בעיות בשחזור של מצב מקבץ הפעילויות הקודמות (back stack) שנגרמו בניסיון לשחזר רשומה במקבץ הפעילויות הקודמות (back stack) שלא ניתן להגיע אליה באמצעות מזהה מהיעד הנוכחי. מכיוון שהמסלולים מגובים על ידי מזהים, גם יעדים שנבנו באמצעות מסלולים הושפעו. בנוסף, תוקנה קריסה שנגרמה כתוצאה מקריאה ל-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 מאובייקט Kotlin Serializable. (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

הפונקציונליות הזו משתמשת ב-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 מקומית ל-methods שניתנים להגדרה בתוך 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 באמצעות גישה שמבוססת על Kotlin Serialization. ממשקי ה-API האלה לא סיימו את הפיתוח ומסומנים בהערה ExperimentalSafeArgsApi. ההערה הזו תוסר כשהממשק כולו יהיה מוכן בגרסה עתידית. (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

תיקוני באגים

  • ‫NavHost משתמש עכשיו ב-Alignment.TopStart כארגומנט ברירת המחדל של contentAlignment. כך היא תהיה זהה לברירת המחדל של AnimatedContent, ויתוקנו מקרים מסוימים של מעבר לא צפוי ממרכז המעבר. ‫(I09e72, ‏ b/330111602)
  • כשמבצעים את תנועת החזרה החזויה באמצעות Navigation Compose, המעבר המותאם אישית NavHost יושלם עכשיו בצורה נכונה במקום להסתיים באופן מיידי. (I99017, ‏ b/327292110)

גרסה ‎2.8.0-alpha05

‫20 במרץ 2024

‫androidx.navigation:navigation-*:2.8.0-alpha05 מופץ. גרסה ‎2.8.0-alpha05 מכילה את השמירות האלה.

תכונות חדשות

  • עכשיו אפשר להעביר ארגומנטים ל-NavGraph של startDestination ישירות במסלול startDestination בלי להסתמך על defaultValue. ההגדרה הזו חלה גם על תגי NavGraph startDestinations מוטמעים. (I0e0b5, ‏ b/109505019, ‏ b/188693139)

שינויים ב-API

  • נוספה מחלקה מופשטת חדשה, CollectionNavType<T>, שהיא מחלקת משנה של NavType<T> לארגומנטים מבוססי-אוסף כמו רשימה, מערכים ומפות. ‫(Ic6d63, ‏ b/188693139)
  • כל מערכי ברירת המחדל NavType (IntArrayType, ‏LongArrayType, ‏FloatArrayType, ‏BoolArrayType ו-StringArrayType) הם עכשיו מסוג CollectionNavType (Idcf79, ‏b/188693139)
  • ב-NavType יש עכשיו API חדש ופתוח valueEquals שקובע אם שני ערכים מאותו סוג שווים זה לזה. (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)

תיקוני באגים

  • תוקנה בעיה ב-Navigation שגרמה לכך ש-NavGraphViewModels נשמרו DESTROYED מוקדם מדי כי ViewModel של הרשומה המשויכת לא היה חלק מהמצב השמור. (Ib6bb7, b/317581849)

עדכון תלות

גרסה ‎2.8.0-alpha02

‫7 בפברואר 2024

‫androidx.navigation:navigation-*:2.8.0-alpha02 מופץ. גרסה ‎2.8.0-alpha02 מכילה את השמירות האלה.

תכונות חדשות

  • ‫Navigation Compose תומך עכשיו בחיזוי תנועת החזרה באפליקציה באמצעות ממשקי ה-API החדשים SeekableTransitionState מ-compose-animation. כך תוכלו להשתמש בתנועת החזרה כדי לראות את היעד הקודם עם המעבר המותאם אישית שלכם, לפני שתחליטו אם לאשר את העסקה באמצעות התנועה המלאה או לבטל אותה. (I8b8e9)

גרסה ‎2.8.0-alpha01

‫24 בינואר 2024

‫androidx.navigation:navigation-*:2.8.0-alpha01 מופץ. גרסה ‎2.8.0-alpha01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן דליפת BackStackState שבה כמה קריאות של saveState ליעד מסוים הובילו לשמירה של כמה מצבים, אבל רק הראשון יכול היה לשחזר. ‫(I598b0, ‏ b/309559751)
  • תוקנה בעיה שבה ארגומנטים שהם לא מחרוזות לא הוצגו כמו שצריך כשנעשה שימוש ב-NavigationUI helpers כדי לאכלס את הכותרת של סרגלי האפליקציות. (#636, b/316676794)

עדכון תלות

  • ‫Navigation Compose תלוי עכשיו ב-Compose 1.7.0-alpha01, וזה פותר בעיה שיכולה לגרום לאנימציית שינוי גודל לא צפויה. (b/297258205)

External Contribution

  • תודה ל-SimonMarquis על תיקון בעיית התצוגה של ארגומנטים שהם לא מחרוזת כשמשתמשים ב-NavigationUI helpers כדי לאכלס את הכותרת של סרגלי האפליקציה.

גרסה 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: תוקנה בעיה שבה ארגומנטים שהם לא מסוג String לא הוצגו בצורה תקינה כשנעשה שימוש ב-helpers‏ NavigationUI כדי לאכלס את הכותרת של סרגלי האפליקציות. (#636, b/316676794)

External Contribution

  • תודה ל-SimonMarquis על תיקון בעיית התצוגה של ארגומנטים שהם לא מחרוזת כשמשתמשים ב-NavigationUI helpers כדי לאכלס את הכותרת של סרגלי האפליקציה.

גרסה 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 יציג עכשיו את יעד ההתחלה במעבר הקומפוזיציה הראשון, במקום להמתין למעבר השני כדי לקרוא את המצב המעודכן. ‫(I439a7, ‏ b/304852206)

תיקוני באגים

  • תוקנה בעיה שבה מקבץ הפעילויות הקודמות (back stack) היה נמחק אם קראתם ל-setGraph יותר מפעם אחת עם אותו גרף בדיוק, רק אם היה יעד בגרף שהכיל פעולה שמקשרת בין שני יעדים. (Ieaed7)
  • תיבות דו-שיח שנווטו אליהן ונסגרו במהירות לא יופיעו יותר ברשימת NavController.visibleEntries. (I67586, ‏ b/287969970)
  • כשמוציאים רשומה מהמחסנית ואז מבצעים שינוי בהגדרה, הערך של ViewModel ברשומה יימחק בצורה תקינה אם הערך של saveState הוא false. ‫(Idf242, ‏ b/298164648)
  • תוקנה בעיה שבה הפונקציה NavController יכלה לטפל באותו קישור עמוק יותר מפעם אחת אם מקבץ הפעילויות הקודמות (back stack) היה ריק לחלוטין לפני שינוי בהגדרה או קריאה לפונקציה setGraph רק כשה-Intent הנכנס כלל את האפשרות FLAG_ACTIVITY_NEW_TASK. (I73c7f)

עדכונים של יחסי תלות

  • הניווט באמצעות Fragments תלוי עכשיו ב-Fragment 1.6.2, ומתקן בעיה שבה מופעי ViewModel של מקטעים (fragments) מוטמעים לא נוקו כשבוצעה קריאה ל-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 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה ב-Navigation with Fragments שגרמה לכך שהרשימה visibleEntries הכילה רשומות שגויות. ‫(I5caa9, ‏ b/288520638)
  • תוקנה בעיה שגרמה לכך שהיעד של החלון הצף (כלומר, Dialogs, Bottomsheets וכו') אף פעם לא קיבל קריאה חוזרת במחזור חיים 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 ביעדים וכל המופעים של ViewModel בבעלות SavedStateHandle לא שוחזרו בצורה תקינה אחרי השבתת תהליך ויצירה מחדש. ‫(b/298059596, b/289436035)
  • תוקנה בעיה שקרתה כשמוצגות כמה תיבות דו-שיח ב-Navigation Compose בו-זמנית, שבה תיבות דו-שיח שמוסתרות חלקית (למשל, לא תיבת הדו-שיח העליונה ביותר) היו במצב מחזור החיים CREATED ולא במצב STARTED. (aosp/2728520, b/289257213)
  • תוקנה בעיה שקרתה כשמציגים כמה תיבות דו-שיח ב-Navigation Compose בו-זמנית. במקרה כזה, כשסוגרים את תיבת הדו-שיח העליונה, תיבת הדו-שיח העליונה החדשה נתקעת במצב מחזור החיים STARTED במקום לעבור למצב RESUMED כמו שצריך. ‫(aosp/2629401, ‏ b/286371387)
  • Navigation Safe Args לא יוצרים יותר מופע של המשימה באופן מיידי אם היא לא מבוצעת בפועל. (I0e385, ‏ b/260322841)

עדכון תלות

  • הספרייה Navigation Compose תלויה עכשיו ב-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)

גרסה 2.7.0

גרסה 2.7.0

‫9 באוגוסט 2023

‫androidx.navigation:navigation-*:2.7.0 מופץ. גרסה 2.7.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.6.0

אנימציות מ-Accompanist

עכשיו, כש-AnimatedContent יציב, יכולנו להעביר את הקוד מ-Accompanist Navigation Animation בחזרה אל Navigation Compose עצמו.

כלומר, כל התמיכה בהגדרת מעברים מותאמים אישית שהייתה ב-AnimatedNavHost נתמכת ישירות ב-NavHost.

לא יבוצעו שינויים נוספים ב-Accompanist Navigation Animation, ובקרוב נצא משימוש באופן רשמי, יחד עם הנחיות להעברה חזרה ל-Navigation Compose עצמו, אבל זה יהיה ההיפך של מדריך ההעברה ללא שינויים נוספים ב-API שנדרשים אם אתם כבר משתמשים בגרסת האלפא האחרונה של Accompanist ‏ (0.31.2-alpha). (b/197140101)

תיקוני באגים

  • ‫NavHost ב-Navigation Compose מיירט עכשיו בצורה נכונה קריאות חזרה של המערכת גם אחרי שה-Activity הופסק והופעל מחדש. (Icb6de, b/279118447)

עדכונים של יחסי תלות

  • הניווט תלוי עכשיו ב-Compose 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 הנכון למעברים בהתאמה אישית שמשתמשים באפשרות navigate with popUpTo.(/Ib1c3a, b/285153947)

גרסה ‎2.7.0-beta01

‫7 ביוני 2023

‫androidx.navigation:navigation-*:2.7.0-beta01 מופץ. גרסה ‎2.7.0-beta01 מכילה את השמירות האלה.

תיקוני באגים

  • ‫NavHost in Navigation Compose now correctly intercepts system back calls even after the Activity has been STOPPED and RESUMED. (Icb6de, b/279118447)

גרסה ‎2.7.0-alpha01

‫24 במאי 2023

‫androidx.navigation:navigation-*:2.7.0-alpha01 מופץ. גרסה ‎2.7.0-alpha01 מכילה את השמירות האלה.

אנימציות מ-Accompanist

עכשיו, כש-AnimatedContent יציב, יכולנו להעביר את הקוד מ-Accompanist Navigation Animation בחזרה אל Navigation Compose עצמו.

כלומר, כל התמיכה בהגדרת מעברים מותאמים אישית שהייתה ב-AnimatedNavHost נתמכת ישירות ב-NavHost.

לא יבוצעו שינויים נוספים ב-Accompanist Navigation Animation, ובקרוב נצא משימוש באופן רשמי, יחד עם הנחיות להעברה חזרה אל Navigation Compose עצמו. עם זאת, ההנחיות יהיו הפוכות למדריך ההעברה, ולא יידרשו שינויים נוספים ב-API אם כבר משתמשים בגרסת האלפא האחרונה של Accompanist ‏ (0.31.2-alpha). (b/197140101)

תיקוני באגים

  • ‫Navigation 2.6.0-rc02: תוקנה בעיה ב-Navigation ב-Fragments שבה ניווט באמצעות popUpTo והוצאת fragment מ-back stack בלי ליצור מחדש את התצוגה שלו גרמו להפסקת הפעולה של המערכת. (Ieb8d4, ‏ b/281726455)

עדכונים של יחסי תלות

  • הניווט תלוי עכשיו ב-Compose 1.5.0-beta01.

גרסה 2.6.0

גרסה 2.6.0

‫7 ביוני 2023

‫androidx.navigation:navigation-*:2.6.0 מופץ. גרסה 2.6.0 מכילה את השמירות האלה.

שינויים חשובים בניווט מאז גרסה 2.5.0

  • ‫NavBackStackEntry's arguments ו-arguments שמועברים אל OnDestinationChangedListener הם עכשיו רק עותק של הארגומנטים הבלתי ניתנים לשינוי שנוצרו כשעברתם אל היעד. כלומר, שינויים שתבצעו בחבילות האלה לא ישתקפו בגישות הבאות ל-arguments או למופעים אחרים של OnDestinationChangedListener.
  • ‫NavDeepLink תומכת עכשיו בערכי ברירת מחדל למערכים, מה שמאפשר תמיכה בפרמטרים חוזרים של שאילתות שימופו לסוג המערך של הארגומנט. בנוסף, NavType כולל עכשיו שיטת ברירת מחדל שאפשר לבטל כדי לשלב שני ערכים מנותחים.
  • עכשיו מחלקות משנה מותאמות אישית של NavType יכולות לבטל את ההגדרה של serializeAsValue כדי לבצע סריאליזציה של ערך למחרוזת, וכך לאפשר גם סריאליזציה וגם דה-סריאליזציה (באמצעות parseValue) שיהיו כלולות במלואן במחלקה NavType. ‫StringType מבטל עכשיו את ה-method הזה כדי לקרוא ל-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,‏ action או mimetype כדי להיות תקין.

שינויים חשובים ב-Navigation with Fragments מאז גרסה 2.5.0

  • האפליקציה NavHostFragment כבר לא מיירטת את הכפתור "הקודם" של המערכת. כך אפשר לאפליקציית FragmentManager הבסיסית לטפל בחזרה למערכת. כך אפשר להשתמש ב-Fragment 1.7.0-alpha01 ואילך כדי לספק אנימציה של חזרה ניבויים בתוך האפליקציה במכשירי Android U.
  • כשמשתמשים ב-Navigation עם Fragments, ניסיון לבצע באופן ידני פעולת FragmentTransaction שמוסיפה Fragment ל-מקבץ פעילויות קודמות (back stack) של FragmentManager יגרום עכשיו להקפצת הודעת שגיאה (throw) של IllegalArgumentException. תמיד צריך להוסיף פרגמנטים באמצעות navigate() API.
  • כשמשתמשים במחזיק המקום ${applicationId} כמחזיק המקום במאפיינים app:data ו-app:dataPattern ברכיב הפעילות של קובץ XML של ניווט, מחזיק המקום יתמלא באופן אוטומטי ב-packageName של ההקשר בזמן הניפוח.
  • ‫FragmentNavigator משתמש עכשיו בממשקי ה-API למעברים כשמנווטים ופותחים חלונות קופצים NavBackStackEntries. כלומר, NavBackStackEntry Lifecycle יחכו עכשיו עד שאפקטים מיוחדים של כניסה ויציאה של קטע יסתיימו לפני שיעברו לLifecycle.State הסופי.
  • ‫DialogFragmentNavigator משתמש עכשיו בממשקי ה-API למעברים כשמנווטים ופותחים חלונות קופצים NavBackStackEntries. המשמעות היא שהקמפיין NavBackStackEntry Lifecycle ימתין עכשיו עד שהקמפיין DialogFragment Lifecycle יעבור למצב DESTROYED לפני שהוא עצמו יעבור למצב DESTROYED.
  • מעכשיו אפשר לאחזר את NavController ברגע שNavHostFragment מצורף ל-FragmentManager, ולא רק אחרי onCreate().NavHostFragment
  • התמיכה של Navigation במודולים של תכונות דינמיות תלויה עכשיו בספריית הפצת פיצ'רים ב-Play המפורטת.
  • התלות של 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 מה-back stack בלי ליצור מחדש את התצוגה שלו גרמו להפסקת הפעולה של המערכת. (Ieb8d4, ‏ b/281726455)

גרסה ‎2.6.0-rc01

‫10 במאי 2023

‫androidx.navigation:navigation-*:2.6.0-rc01 מופץ. גרסה ‎2.6.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה ב-Navigation עם מקטעים שבה הסרת מקטע באמצעות navigate עם popUpTo בקריאת החזרה במחזור חיים onResume() שלו גרמה ל-IllegalStateException. ‫(I21884, ‏ b/279644470)

גרסה ‎2.6.0-beta01

‫19 באפריל 2023

‫androidx.navigation:navigation-*:2.6.0-beta01 מופץ. גרסה ‎2.6.0-beta01 מכילה את השמירות האלה.

תכונות חדשות

  • ‫NavBackStackEntry מספק עכשיו הטמעה מותאמת אישית של toString. (Iff00b)

תיקוני באגים

  • כשמשתמשים ב-Navigation עם Fragments, ניסיון לבצע ידנית פעולת FragmentTransaction שמוסיפה Fragment ל-מקבץ פעילויות קודמות (back stack) של FragmentManager יגרום עכשיו ל-להקפיץ הודעת שגיאה (throw) של IllegalArgumentException. תמיד צריך להוסיף פרגמנטים באמצעות navigate() API. (I6d38e)
  • אם יש navigate שמוסיף רשומה ו-popBackStack שמסיר אותה באותו פריים, הרשומה העליונה שמתקבלת במקבץ הפעילויות הקודמות (back stack) תחזור עכשיו באופן עקבי אל 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 שלא יכול להיות null, המסלול של היעד הזה חייב להכיל placeholders לארגומנטים ששמם זהה ל-NavArgument שלא יכול להיות null. (Ic62bf, b/274697949)
  • ניווטים לקישורים עמוקים שמבוססים על Action/MimeType ייכשלו מעכשיו אם בפעולת הניווט חסר NavArgument שאי אפשר להגדיר כ-null, שנדרש על ידי NavDestination שאליו Action/MimeType תואם. (Ibfa17, ‏ b/271777424)
  • כש-NavController מגדיר גרף עם אותם מסלול ויעדים כמו הגרף הקודם, הוא מחליף עכשיו כמו שצריך את צמתי הגרף הנוכחיים ואת היעדים במחסנית החזרה במופעים חדשים. תוקן קריסה שהתרחשה כשמשתמשים ב-onLaunchSingleTop בלי לשמור את המצב ב-Navigation Compose. בנוסף, תוקנה שגיאה שבה ניווט ליעדים שמשויכים לגרף הבסיסי יוצר מקבץ פעילויות קודמות (back stack) שגויה. (I5bc58, b/275258161, b/275407804)

גרסה ‎2.6.0-alpha08

‫22 במרץ 2023

‫androidx.navigation:navigation-*:2.6.0-alpha08 מופץ. גרסה ‎2.6.0-alpha08 מכילה את השמירות האלה.

תכונות חדשות

  • ‫NavHostFragment מאפשרת עכשיו לאחזר את NavController ברגע שNavHostFragment מצורף ל-FragmentManager, ולא רק אחרי onCreate(). (Ic6382, b/220186282)

תיקוני באגים

  • תוקנה בעיה NullPointerException כשפותחים גרף מקונן שכולל ארגומנט שלא יכול להיות null. (6b3581, b/249988437)
  • כשמשתמשים באפשרות 'חזרה' של המערכת אחרי ניווט באמצעות popUpTo, המצב של NavController יקפוץ אל הרשומה הנכונה. ‫(I3a8ec, b/270447657)
  • ‫FragmentNavigator יציג עכשיו כניסות כשהמערכת או popBackStack() יסירו את הרכיבים מה-back stack, ויציין אם העסקה משתמשת באפקטים בשביל ה-fragment. (I81bdf)
  • הוספת פרגמנטים ל-FragmentNavigatorFragmentManager בלי להשתמש בניווט לא תגרום יותר לקריסה. (b17204, b/274167493)

עדכונים של יחסי תלות

גרסה ‎2.6.0-alpha07

‫8 במרץ 2023

‫androidx.navigation:navigation-*:2.6.0-alpha07 מופץ. גרסה ‎2.6.0-alpha07 מכילה את השמירות האלה.

תיקוני באגים

  • גרסאות ה-API‏ getBackStackEntry, popBackStack, clearBackStack שמקבלות מסלולים מקבלות עכשיו תבניות מסלולים עם ארגומנטים שניתנים לביטול ופרמטרים של שאילתות שניתנים לביטול (I22294, ‏ b/269302500)
  • נפתרה בעיה שבה קריאה ל-clearBackStack() מ-NavController לא ניקתה את המצב השמור במנהל המקטעים שמשויך למקבץ הפעילויות הקודמות שנוקה. ‫(Ic1cce, ‏ b/271190202)
  • תוקנה רגרסיה בגרסה 2.6.0-alpha06 שגרמה להדגשה של MenuItem שגוי ב-BottomNavigationView כשמשתמשים בחזרה של המערכת בין כרטיסיות. (I634f6, b/270447657)
  • תוקנה רגרסיה בגרסה 2.6.0-alpha06 שגרמה לכך שרכיבי NavBackStackEntry לא הועברו למצב RESUMED כשנעשה שימוש ברכיבי 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)

תיקוני באגים

  • תוקנה קריסה שקורית כשמנסים לנווט בזמן השימוש ב-Dynamic Fragment Navigation. (I3ee29, b/268360479)
  • תוקן באג שבו ניווט לקטע אחר באמצעות הכפתור "הקודם" של המערכת לא מעדכן את הסרגל התחתון לפריט הנבחר הנכון (If559f, ‏ b/269044426)

בעיות מוכרות

  • כשמשתמשים ב-Navigation עם Fragments, מחזור החיים של NavBackStackEntry לא מגיע ל-RESUMED כשמשתמשים ב-APIs של Animation. (b/269646882)
  • כשמשתמשים ב-Navigation עם Fragments ומנווטים באמצעות BottomNavigation, אם מנסים לשחזר את מקבץ הפעילויות הקודמות עם כמה רשומות, BottomMenuItem לא מתעדכן בצורה נכונה. (b/270447657)
  • כשמשתמשים ב-Navigation עם Fragments, אחרי שמשחזרים את המצב, הפונקציה NavBackStackEntry Lifecycle לא מקבלת את הערך DESTROYED כשה-Fragment שלה הוא DESTROYED . (b/270610768)

גרסה ‎2.6.0-alpha05

‫8 בפברואר 2023

‫androidx.navigation:navigation-*:2.6.0-alpha05 מופץ. גרסה ‎2.6.0-alpha05 מכילה את השמירות האלה.

תכונות חדשות

  • ‫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 מספק עכשיו את prepareForTransition API כדי לאפשר ל-Navigators להעביר NavBackStackEntries ל-Lifecycle.States ביניים. (I42c21, b/238686802)
  • עכשיו אפשר לגשת למצבור הפעולות הקודמות שמשויך ל-NavGraphNavigator או ל-ComposeNavigator דרך נכס backstack. ‫ComposeNavigator גם חושף עכשיו את הקריאה החוזרת onTransitionComplete() כדי לסמן NavBackStackEntry שהפעיל ניווט או פעולת popBackStack כהשלמה. (I02062, I718db, b/257519195)

תיקוני באגים

  • מצב הניווט לא יבצע פעולה כשהמשתמשים משתמשים בממשקי ה-API של push/popWithTransition והערך כבר מטופל. (Iadbfa, ‏ b/261213893)
  • כשמשתמשים ב-launchSingleTop עם NavGraph מקונן, כל היעדים שמתחילים מהיעד המקורי ועד startDestination יתווספו רק לחלק העליון של היסטוריית החזרה. (Id4bea, b/253256629)
  • הניווט יחליף עכשיו את המופע DialogFragment בצורה תקינה כשמנווטים לאותו יעד עם הדגל launchSingleTop שמוגדר כ-true. (I45b5a, ‏ b/149572817)
  • ניווט 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 מבטל עכשיו את ה-method הזה כדי לקרוא ל-Uri.encode ב-String הנתון. ‫(Ie5213, ‏ b/247637434)
  • ‫NavigationUI מספק עכשיו יומנים כשהוא לא מצליח לנווט דרך MenuItem שנבחר. (I2af5a, b/247730357)

תיקוני באגים

  • קישורי עומק לניווט עוברים עכשיו ניתוח עצלני במקום ניתוח במהלך אתחול הגרף, מה שיכול לשפר את ביצועי האפליקציה בזמן ההפעלה. (Iab0ab)
  • תוקנה קריסה שנגרמה מניווט למעלה אחרי קישור עומק ליעד עם ארגומנטים של ברירת מחדל מסוג null. (I51c24, ‏ b/243183636)

עדכון תלות

  • התמיכה של Navigation במודולים של תכונות דינמיות תלויה עכשיו בספריית הפצת פיצ'רים ב-Play המפורטת. (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)
  • מתוך Navigation 2.5.3: תוקנה בעיה שבה מצב Compose השמור (למשל, שימושים ב-rememberSaveable) לא נשכח ולא הוסר כשחלון היעד נסגר ממקבץ הפעילויות הקודמות (back stack). (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} כמחזיק המקום במאפיינים app:data ו-app:dataPattern ברכיב הפעילות של קובץ XML של ניווט, מחזיק המקום יתמלא באופן אוטומטי ב-packageName של ההקשר בזמן הניפוח. (Iaabde, b/234223561)
  • ניסיון ליצור NavDeepLink ריק באמצעות navDeepLink Kotlin DSL יגרום עכשיו להצגת אזהרת lint שמציינת שקישור עומק צריך uri,‏ action או mimetype כדי להיות תקין. (I08d2f, b/154038883)

שינויים ב-API

  • נוספה פונקציית תוסף חדשה, NavDestination, שמנתחת תוויות דינמיות עם ארגומנטים בצורה של android:label="{arg}" למחרוזת. תומך ב-ReferenceType ארגומנטים על ידי ניתוח של ערכי R.string לערכי המחרוזת שלהם. (I07d89, b/236269380)

שינויים בהתנהגות

  • הערכים arguments של NavBackStackEntry והערך arguments שמועבר אל OnDestinationChangedListener הם עכשיו רק עותק של הארגומנטים הבלתי ניתנים לשינוי שנוצרו כשעברתם ליעד. כלומר, שינויים שתבצעו בחבילות האלה לא ישתקפו בגישות הבאות ל-arguments או למופעים אחרים של OnDestinationChangedListener. (I676f5)

תיקוני באגים

  • מתוך Navigation 2.5.2: ניווט דינמי מנסה עכשיו להתקין יעדים של פעילות ממודולים אחרים לפני שהוא עובר אליהם. (Ia2c16, b/240292838)
  • מ-Navigation 2.5.2: הניווט יחליף עכשיו את מופע ה-Fragment בצורה תקינה כשמנווטים לאותו יעד ומגדירים את הדגל 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)
  • תוקנה בעיה שבה מצב Compose השמור (למשל, שימושים ב-rememberSaveable) לא נשכח ולא הוסר כשדף היעד הוצא ממקבץ הפעילויות הקודמות (back stack). (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.1

‫27 ביולי 2022

‫androidx.navigation:navigation-*:2.5.1 מופץ. גרסה 2.5.1 מכילה את השמירות האלה.

תיקוני באגים

  • ‫Navigation Safe Args לא יגרום יותר להצגת אזהרות לגבי הוצאה משימוש בכיתות שנוצרו כשמשתמשים בסוגי ארגומנטים בהתאמה אישית שנשמרים ב-Bundle. (Id86ed, ‏ b/237725966)

עדכונים של יחסי תלות

גרסה 2.5.0

29 ביוני 2022

‫androidx.navigation:navigation-*:2.5.0 מופץ. גרסה 2.5.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.4.0

  • ‫CreationExtras Integration – ל-Navigation יש עכשיו אפשרות לספק ViewModelProvider.Factory בלי שמירת מצב דרך Lifecycle 2.5.0’s CreationExtras.

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 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן קראש שנגרם כתוצאה ממעבר מהיר בין יעדים בתחתית כשמשתמשים ב-Navigation Compose 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 מכילה את השמירות האלה.

תכונות חדשות

  • נוסף כלל חדש של Lint כדי להזהיר מפני הצבת רכיבי <deeplink> בתוך רכיבי <activity> בקובץ navigation.xml.(Ic15a5, b/178403185)

תיקוני באגים

  • היקפים של קומפוזיציות ב-NavHost וב-DialogHost מושמדים עכשיו בסדר הצפוי, כלומר קומפוזיציות פנימיות מושמדות לפני קומפוזיציות חיצוניות. (I157e6)
  • התכונה Navigation SafeArgs משתמשת עכשיו ב-PathSensitivity.RELATIVE ב-ArgumentsGenerationTask כדי לאפשר העברה של המטמון. המשמעות היא שאפשר לעשות שימוש חוזר בערך במטמון מ-CI build ל-local 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(). התיקון הזה פותר בעיה של מרוץ תהליכים שמתרחשת כשמשתמשים ב-ViewModel ביעד dialog שגורמת ל-IllegalStateException כשסוגרים את תיבת הדו-שיח באמצעות לחצן החזרה של המערכת או הקשה מחוץ לתיבת הדו-שיח כדי לצאת. (Id7376, b/226552301)

עדכונים של יחסי תלות

  • הניווט תלוי עכשיו ב-Lifecycle 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. אם מספקים תוספים, המערכת מתעלמת מהארגומנטים שמוגדרים בהפעלה. ‫(I6c43b, ‏ b/224844583)
  • NavDeepLink יכול עכשיו לנתח כתובות URI עם פרמטר שאילתה יחיד ללא ערך. ‫(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)
  • מתוך Navigation 2.4.1: כשמשתמשים בקישור עמוק דרך כמה רכיבי NavGraph מוטמעים, עכשיו מקבץ הפעילויות הקודמות (back stack) כולל כמו שצריך את יעדי ההתחלה הביניים. (I504c0, b/214383060)

גרסה ‎2.5.0-alpha01

‫26 בינואר 2022

‫androidx.navigation:navigation-*:2.5.0-alpha01 מופץ. גרסה ‎2.5.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

תיקוני באגים

  • תוקנה בעיה שגרמה לכך שגישה ל-ViewModel שנוצר באמצעות by navGraphViewModels() מ-onCreate() של Fragment נכשלה עם IllegalStateException. (I8a14d)
  • ‫NavDeepLinks לא יפענח יותר את הארגומנטים פעמיים ללא צורך, מה שאומר שהארגומנטים הנכונים מועברים עכשיו ליעד הסופי. ‫(I31b0a, ‏ b/210711399)

‫Safe Args

  • הספרייה Safe Args תלויה עכשיו בגרסה 7.0.4 של פלאגין של Android Gradle. המשמעות היא ש-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 מכילה את השמירות האלה.

תיקוני באגים

  • הקומפיילר של NavHostFragment יגדיר עכשיו את OnBackPressedDispatcher בצורה נכונה כשמשתמשים ב-viewbinding עם תרשימים מקוננים. (Ifbb51, ‏ b/214577959)
  • כשמשתמשים בקישור עמוק דרך כמה רכיבי NavGraph מוטמעים, עכשיו מקבץ פעילויות קודמות (back stack) כולל כמו שצריך את יעדי ההתחלה הביניים. (I504c0, b/214383060)
  • העברה לאחור מ-Navigation 2.5.0-alpha01: תוקנה בעיה שבה גישה ל-ViewModel שנוצר באמצעות by navGraphViewModels() מ-Fragment's onCreate() נכשלה עם IllegalStateException. (I8a14d)
  • הועבר מגרסה קודמת של Navigation 2.5.0-alpha01: NavDeepLinks כבר לא מפענח ארגומנטים פעמיים ללא צורך, כלומר הארגומנטים המפוענחים בצורה תקינה מועברים עכשיו ליעד הסופי. ‫(I31b0a, ‏ b/210711399)
  • הועבר מגרסה קודמת של Navigation 2.5.0-alpha01: Safe Args תלוי עכשיו בגרסה 7.0.4 של פלאגין של Android Gradle. המשמעות היא שהתוסף Navigation Safe Args לא יהיה יותר תואם לגרסאות Android Studio שקודמות לגרסה 7.0, אבל הוא תואם עכשיו ל-Android Gradle Plugin מגרסה 7.1.0 ואילך. (I41c88, b/213086135, b/207670704)

גרסה 2.4.0

גרסה 2.4.0

‫26 בינואר 2022

‫androidx.navigation:navigation-*:2.4.0 מופץ. גרסה 2.4.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.3.0

  • כל הארטיפקטים של Navigation נכתבו מחדש ב-Kotlin. השינוי הזה שיפר את האפשרות להגדיר ערך null למחלקות שמשתמשות בגנריקס (כמו מחלקות משנה של NavType). כל פונקציות ההרחבה של Kotlin שהיו בעבר חלק מארטיפקטים של -ktx הועברו לארטיפקטים הראשיים המתאימים. פריטי האומנות -ktx ימשיכו להתפרסם, אבל הם יהיו ריקים לחלוטין.
  • הארטיפקט navigation-fragment מכיל עכשיו הטמעה מוכנה מראש של פריסת שני חלונות באמצעות AbstractListDetailFragment החדש. הקטע הזה משתמש ב-SlidingPaneLayout כדי לנהל חלונית רשימה (שמסופקת על ידי מחלקת המשנה) וחלונית פרטים, שמשתמשת ב-NavHostFragment כהטמעה שלה, כפי שניתן לראות בהטמעה לדוגמה.
  • ה-method‏ currentBackStackEntryAsFlow() ב-NavController מספק Flow שמופעל בכל פעם ש-NavBackStackEntry הנוכחי משתנה. אפשר להשתמש בתהליך הזה כחלופה לניהול ידני של OnDestinationChangedListener.
  • ה-NavController מציע עכשיו את האפשרות לאחזר רשימה של כל המופעים הגלויים של NavBackStackEntry בתור StateFlow באמצעות המאפיין הניסיוני visibleEntries.
  • עכשיו אפשר להרחיב את המחלקה NavType כדי ליצור NavTypes מותאמים אישית. אפשר להשתמש בסוגים מותאמים אישית רק כשיוצרים את גרף הניווט באופן פרוגרמטי, למשל באמצעות Navigation Graph Kotlin DSL.
  • ב-Navigation יש עכשיו ממשקי API‏ findStartDestination() ו-getHierarchy() שאפשר להשתמש בהם כדי להטמיע NavigationUI בהתאמה אישית. ‫findStartDestination() היא פונקציית הרחבה של NavGraph שתאתר את יעד ההתחלה בפועל שיוצג כשעוברים לתרשים, גם אם startDestination היא בעצמה NavGraph מקוננת. ‫getHierarchy() היא פונקציה ב-NavDestination שאפשר להשתמש בה כדי לוודא שיעד נתון נמצא בהיררכיה של יעד אחר.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • ‫NavigationUI methods שהשתמשו ב-BottomNavigationView עודכנו כך שהם משתמשים במחלקת העל שהוצגה ב-Material 1.4.0, ‏ NavigationBarView. כך אפשר להשתמש בשיטות האלה עם 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)
    }
    

מסלולי ניווט ו-Kotlin DSL

בגרסאות קודמות של Navigation, לכל יעד היה מזהה מספר שלם קבוע שזיהה אותו באופן ייחודי מבין היעדים האחים שלו, ואפשר navigate() ליעד הזה ישירות או באמצעות פעולה. השיטה הזו עדיין תקפה ושימושית, במיוחד במקרים שבהם מגדירים את גרף הניווט ב-XML ואפשר להשתמש בקבועי R.id שנוצרים אוטומטית או ב-Safe Args (שמשתמש בקבועים האלה כדי ליצור קוד בזמן הבנייה). עם זאת, המערכת הזו של מספרים שלמים ייחודיים לא הצליחה לתעד את המשמעות הסמנטית ואת היכולת הבעה שנדרשות כדי לתמוך בגרפים דינמיים לחלוטין שנבנים באופן פרוגרמטי בזמן הריצה באמצעות Navigation Kotlin DSL.

בגרסה הזו נוספה אפשרות חדשה לזיהוי ייחודי של יעד בתרשים ניווט לפי המסלול שלו. מסלול הוא String שמגדיר את הנתיב הייחודי ליעד. כל שיטות ה-Kotlin DSL שקיבלו מזהה יעד הוצאו משימוש והוחלפו ב-API מקביל שמקבל מסלול.

כל נתיב צריך להיות החלק של Uri שמגדיר את היעד, למשל home, profile/{userId}, profile/{userId}/friends וכו'. כשמזהים יעד שמשויך לחלק ספציפי בתוכן, הארגומנטים הדינמיים האלה צריכים להיות חלק מהנתיב, בהתאם לאותם כללים של קישורי עומק מרומזים.

כל ממשקי ה-API של NavController שבעבר קיבלו רק מזהה, כוללים עכשיו עומס יתר שמקבל נתיב String. זה כולל את navigate(),‏ popBackStack(),‏ popUpTo() ו-getBackStackEntry().

השינוי הזה משפיע על ממשקי ה-API:

  • המאפיין popUpTo Kotlin ב-Kotlin DSL יצא משימוש, ועכשיו צריך להשתמש במאפיין popUpToId.
  • הוצאנו משימוש את getStartDestination() API. במקומו, אפשר להשתמש ב-getStartDestinationId().

בניגוד לניווט לפי מזהה, ניווט לפי נתיב פועל לפי אותם כללים כמו קישורי עומק מרומזים, כך שאפשר לנווט ישירות לכל יעד בכל גרף מקונן, ולוודא שאפשר להשתמש בנתיבים האלה בפרויקטים מרובי מודולים בלי להוסיף באופן מפורש קישור עומק שגלוי חיצונית לכל יעד.

Navigation Compose

ארטיפקט navigation-compose מספק שילוב בין רכיב הניווט לבין Jetpack Compose. היא משתמשת בפונקציות @Composable כיעדים באפליקציה.

הגרסה הזו כוללת:

  • פונקציית NavHost composable שמאפשרת ליצור את גרף הניווט באמצעות Kotlin DSL, עם יעדי composable ו-dialog, בתוספת תמיכה ב-Navigators אופציונליים כמו אלה מ-Accompanist Navigation Material.
  • תמיכה חובה בעמעום הדרגתי בין יעדים. אפשר להשתמש ב-Accompanist Navigation Animation כדי לשלוט במעברים של כניסה ויציאה באמצעות ממשקי Compose API ניסיוניים.
  • הגדרת היקף של Lifecycle לכל יעד שאפשר להרכיב. כל יעד מגיע למצב RESUMED רק כשכל המעברים הנכנסים מסתיימים, ויורד מיד למצב STARTED כשמתחילים מעברים יוצאים. כך אפשר להימנע מכל הבעיות שקשורות ל-IllegalStateException ולמגע מרובה על ידי הפעלת קריאה ל-navigate רק כש-Lifecycle הוא RESUMED.
  • הגדרת היקף של ViewModel (באמצעות viewModel() API של Lifecycle ViewModel Compose 2.4.0 או hiltViewModel() של Hilt Navigation Compose 1.0.0 ברמת היעד, שמספק היקף ששומר על הנתונים גם אחרי שינויים בהגדרות וגם אחרי שהמשתמש חוזר אחורה (כשתוכן ה-Composable מושמד בדרך אחרת), ואות ב-ViewModel‏ onCleared() שמציין את ההשמדה הקבועה ואת הניקוי של המצב שמשויך ל-NavBackStackEntry.
  • הגדרת היקף של מצב rememberSaveable ברמת היעד, כדי לוודא שכל המצב שניתן להרכבה נשמר ומשוחזר באופן אוטומטי כשחוזרים ליעד.
  • תמיכה מלאה בשמירה ובשחזור של מצב NavController ומצב היעד שלו אחרי השבתת תהליך ויצירה מחדש.
  • שילוב אוטומטי עם הכפתור "הקודם" במערכת.
  • תמיכה בהעברת ארגומנטים, בצירוף קישורי עומק ליעדים ובהחזרת תוצאה ליעדים קודמים.

  • אפשר ליצור רכיבי עזר ספציפיים ב-rememberNavController() וב-currentBackStackEntryAsState() כדי לאפשר העברת מצב וחיבור של NavController לרכיבים שניתנים להרכבה מחוץ ל-NavHost (כמו סרגל ניווט תחתון).

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

מידע נוסף זמין במדריך בנושא Compose Navigation.

Multiple back stacks

ה-NavController אחראי לניהול של מקבץ הפעילויות הקודמות (back stack) של יעדים, להוספת יעדים למקבץ הפעילויות הקודמות (back stack) כשמבצעים navigate() אליהם ולהסרתם כשקוראים ל-popBackStack() או מפעילים את הכפתור "הקודם" של המערכת. הוספנו תמיכה בשמירה ובשחזור של מקבץ פעילויות קודמות (back stack) למחלקת NavOptions הקיימת ובשילוב שלה עם רכיבי <action> ב-XML של תרשים הניווט.

כחלק מהשינוי הזה, השיטות NavigationUI של onNavDestinationSelected(), ‏ BottomNavigationView.setupWithNavController() ו-NavigationView.setupWithNavController() שומרות עכשיו באופן אוטומטי את המצב של יעדים שהוצאו מהמחסנית ומחזירות אותו, וכך מאפשרות תמיכה בכמה מחסניות חזרה בלי לבצע שינויים בקוד. כשמשתמשים ב-Navigation עם Fragments, זו הדרך המומלצת לשילוב עם כמה מחסניות חזרה.

ממשקי ה-API הבסיסיים לשמירה ולשחזור של המצב נחשפים באמצעות מספר פלטפורמות:

  • ב-XML של הניווט, לרכיב <action> יש עכשיו אפשרות להשתמש במאפיינים הבוליאניים app:popUpToSaveState ו-app:restoreState כדי לשמור את המצב של כל היעדים שהוצגו באמצעות app:popUpTo ולשחזר את המצב שמשויך ליעד שהועבר כ-app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ב-navOptions Kotlin DSL, אפשר להוסיף את הנכס הבוליאני 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() וב-overload החדש ל-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, בהתאם לאכיפה של השרשור הראשי שהוצגה ב-Lifecycle 2.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: גרסה 2.4.0 של Safe Args לא תואמת ל-Android Gradle Plugin מגרסה 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)

תיקוני באגים

  • קישורי דיפ לינק לא יתעלמו יותר מארגומנטים עם ערכים שזהים לשם של הפלייסהולדר. (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)

תיקוני באגים

  • תוקנה בעיה שבה רכיבי NavBackStackEntry נדחפו למטה אל Lifecycle.State.CREATED אחרי מעבר אל Lifecycle.State.STARTED כש-NavHost נוסף ישירות אל setContent() של הפעילות. (Ia5ac1, ‏ b/203536683)
  • תוקן מרוץ תהליכים שבו הסרת יעד DialogFragment ממקבץ הפעילויות הקודמות (back stack) לפני שתיבת הדו-שיח הוצגה בפועל לא גרמה לסגירת תיבת הדו-שיח, וכתוצאה מכך התרחשה קריסה כשהמשתמש סגר את תיבת הדו-שיח באופן ידני. (I687e5)
  • תוקנה בעיה שבה onNavDestinationSelected API ב-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 עם Fragments. (I901e3, ‏ b/201446416)

שינויים ב-API

  • ה-API של visibleEntries נמצא עכשיו בשלב ניסיוני. (I93f6f)

תיקוני באגים

  • ה-ViewModels לא ייהרסו יותר כשמעברים מופרעים על ידי ניווט הלוך ושוב בין אותם מסכים (Id52d8, ‏ b/200817333)
  • כשמוסיפים קישורי עומק ל-NavDestination, לא צריך יותר לציין ערך ברירת מחדל לארגומנטים מסוג NavDeepLink. (I5aad4, ‏ b/201320030)
  • רכיבי NavBackStackEntries עם מחזורי חיים שונים לא נחשבים יותר שווים. המשמעות היא שרכיב NavHost יבצע קומפוזיציה מחדש של כל היעדים בצורה תקינה כשמבצעים ניווט באמצעות singleTop וכשבוחרים מחדש פריטים בתפריט התחתון. (I1b351, b/196997433)
  • תוקנה בעיה ב-AbstractListDetailFragment שגרמה לכך שהמערכת לא טיפלה במאפיינים layout_width ו-layout_weight שמוחזרים בחלונית הרשימה על ידי onCreateListPaneView() בצורה נכונה, או שהתעלמה מהם. (f5fbf3)
  • הסטטוס החזותי של יעדים בתיבת דו-שיח נשאר עכשיו מסונכרן עם הסטטוס של DialogFragmentNavigator. המשמעות היא שקריאה ידנית ל-API האסינכרוני dismiss() עבור 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 באמצעות visibleEntries StateFlow ‏ (Ia964e)
  • ‫rememberNavController() מקבלת עכשיו קבוצה אופציונלית של מופעים של Navigator שיוספו ל-NavController שמוחזר כדי לתמוך טוב יותר ב-Navigators אופציונליים, כמו אלה של 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 מכילה את השמירות האלה.

תכונות חדשות

  • עכשיו אפשר להשתמש בשיטה clearBackStack() כדי לנקות כל מצב שנשמר באמצעות popBackStack() או popUpToSaveState. (I80a0f)
  • מעכשיו אפשר להעביר רשימה של ארגומנטים או קישורי עומק לבונה של גרף הניווט המקונן, והם יתווספו אוטומטית לגרף שיתקבל. ‫(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)
  • כשמשתמשים בארגומנטים מסוג Nullable NavDeepLink, כבר לא צריך להגדיר ערך ברירת מחדל. ‫(Ia14ef, ‏ b/198689811)
  • קריאה ל-setGraph() עם גרף חדש תנקה עכשיו גם את כל מקבצי הפעילויות הקודמות (back stack) שנשמרו, בנוסף להתנהגות הקודמת של הוצאת מקבץ הפעילויות הקודמות (back stack). (I97f96)
  • תוקנה בעיה שבה לא נשלחה התראה למופעי OnDestinationChangedListener ול-currentBackStackEntryFlow כשנעשה שימוש ב-launchSingleTop. (Iaaebc)

עדכונים של יחסי תלות

גרסה ‎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)
  • ‫Navigation Compose מבצע עכשיו קומפוזיציה מחדש בצורה תקינה כשמשנים את הארגומנטים של מחסנית החזרה ומשתמשים ב-launchSingleTop=true. (Iebd69, ‏ b/186392337)
  • לא יהיה יותר ArrayIndexOutOfBoundsException כשמתקשרים אל setGraph עם גרף של 13 או 29 יעדים. ‫(I1a9f1, ‏ b/195171984)
  • מחולל ה-Java של SafeArgs לא אמור יותר לגרום לאזהרות של Lint כשיוצרים מחלקות Args. (I1a666, b/185843837)

External Contribution

  • תודה ל-ospixd על כך שקישורי העומק מוודאים שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) מופיעים ב-Uri. (מס' 204, b/185527157)

גרסה ‎2.4.0-alpha07

‫18 באוגוסט 2021

‫androidx.navigation:navigation-*:2.4.0-alpha07 מופץ. גרסה ‎2.4.0-alpha07 מכילה את השמירות האלה.

תיקוני באגים

  • ‫Navigation Compose שומר עכשיו את המצב בצורה תקינה אחרי שינויים בהגדרות וכשמחליפים גרפים בזמן השימוש בתכונה multiple back stack. (If5a3d, ‏ b/195141957)
  • בחירה מחדש של אותה כרטיסייה כשמשתמשים ב-Navigation Compose עם כמה מחסניות חזרה לא תגרום יותר להצגת מסך ריק. (I860dc, ‏ b/194925622)
  • ‫NavHost עכשיו עוקב אחרי שינויים ב-Lifecycle.State של NavBackStackEntry, כלומר שימוש ב-NavHost בקטע קוד יגרום עכשיו להרכבה מחדש תקינה כשהשינויים במחזור החיים יתרחשו, במקום להצגת מסך ריק. (I4eb85, ‏ b/195864489)
  • תוקנה בעיה שבה סגירה של DialogFragment לא עדכנה את הסטטוס של NavController בצורה נכונה אחרי יצירה מחדש של הפעילות (כלומר, אחרי שינוי בהגדרה). (Icd72b)
  • תוקנה בעיה שבה כשמוצגת תיבת דו-שיח ליעד, המערכת לא מעדכנת את הטיפול בלחצן 'הקודם' של NavController, ולכן יכול להיות ש-NavController מיירט את הכפתור "הקודם" למרות שאין לו מקבץ פעילויות קודמות (back stack) להצגה. (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

  • השמות של ה-methods‏ requireSlidingPaneLayout() ו-requireDetailPaneNavHostFragment() ב-AbstractListDetailFragment שונו ל-getSlidingPaneLayout() ו-getDetailPaneNavHostFragment(), בהתאמה. (I34a08)

שינויים בהתנהגות

  • כשמנווטים עם אנימציות (כמו Crossfade), ה-Lifecycle של היעד החדש יגיע עכשיו רק ל-RESUMED כשהאנימציה תושלם. (If0543, ‏ b/172112072, ‏ b/194301889)
  • הלחצן 'ניווט' NavHost ב-Compose מגדיר עכשיו את הגרף כחלק מהקומפוזיציה הראשונה. (Ieb7be)

תיקוני באגים

  • הסרת היעד האחרון מתרשים ניווט כבר לא גורמת לשגיאה ClassCastException. (If0543, ‏ b/172112072, ‏ b/194301889)
  • תוקנה שגיאה NullPointerException שהתרחשה כשמוסיפים קישור עומק בלי Uri ועוברים דרך מסלול או קישור עומק. (938a0c, b/193805425)
  • תוקנה בעיה ב-Navigation Compose שבה קישור עומק 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, מעל היעד הנוכחי של 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)
  • מכונות Navigator בהתאמה אישית יכולות עכשיו להשתמש בממשקי ה-API‏ pushWithTransaction ו-popWithTransition ב-NavigatorState כדי להעביר או להוציא נתונים ליעד באופן אסינכרוני. הערה: אף אחד מהרכיבים לניווט שכלולים לא משתמש עדיין בממשקי ה-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)
  • תוקנה רגרסיה שהוצגה בNavigation 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, וגם בכל ה-DSL של Kotlin DynamicNavigation. (Ib5544, ‏ Ia617b, ‏ I22f96, ‏ b/188914648, ‏ b/188901565)
  • ‫NavigationUI הוסיפה באופן זמני ממשקי API ניסיוניים כדי לאפשר ביטול של שמירת המצב. למרות ששמירת המצב תמיד היא ההתנהגות הנכונה, עדיין יש שימושים בספריות שהוצאו משימוש (כלומר, fragments שנשמרו) שלא ניתן לתמוך בהם כששומרים את המצב. לכן, יש כאן הזדמנות לאפליקציות לעבור בהדרגה מכל ממשקי API שלא נתמכים. (Idf93c)
  • ב-Navigation יש עכשיו ממשקי API‏ findDestination() ו-getHierarchy() שאפשר להשתמש בהם כדי להטמיע NavigationUI בהתאמה אישית. ‫findDestination() היא פונקציית הרחבה של NavGraph שתאתר יעד בגרף. ‫getHierarchy() היא פונקציה ב-NavDestination שאפשר להשתמש בה כדי לוודא שיעד נתון נמצא בהיררכיה של יעד אחר.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • השיטות של NavigationUI שקיבלו BottomNavigationView עודכנו כך שיקבלו במקום זאת את מחלקת העל שלהן, שהוצגה ב-Material 1.4.0,‏ NavigationBarView. כך אפשר להשתמש בשיטות האלה עם NavigationRailView. (Ib0b36, ‏ b/182938895)

  • כשמנפחים רכיב <action> באמצעות XML, מאפייני אנימציה יכולים להשתמש במאפיינים שנמשכים מהעיצוב באמצעות התחביר app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

שינויים ב-API

  • הוצאנו משימוש ב-Kotlin DSL את ה-builders שמשתמשים במזהה, ועכשיו צריך להחליף אותם ב-builders שמשתמשים בנתיבים (I85b42,‏ b/188816479) (I9f58f,‏ b/188816479)

תיקוני באגים

  • ‫DialogFragmentNavigator משתמש עכשיו ב-API‏ NavigatorState.pop() כדי לעדכן את NavController כשתיבת דו-שיח נסגרת בלחיצה על לחצן החזרה של המערכת או בלחיצה מחוץ לתיבה. כך המצב של NavController תמיד מסונכרן עם המצב של Navigator. (I2ead9)
  • הניווט לא מספק יותר ConcurrentModificationException כשמשתמשים במניפולציה של רשימת OnDestinationChangedListeners מתוך קריאה חוזרת (callback) של onDestinationChanged. (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 מכילה את השמירות האלה.

תכונות חדשות

  • ה-method‏ currentBackStackEntryAsFlow() ב-NavController מספק Flow שמופעל בכל פעם ש-NavBackStackEntry הנוכחי משתנה. אפשר להשתמש בתהליך הזה כחלופה לניהול ידני של OnDestinationChangedListener. (I19c4a, ‏ #89, ‏ b/163947280)

Multiple back stacks

ה-NavController אחראי לניהול של מקבץ הפעילויות הקודמות (back stack) של יעדים, להוספת יעדים למקבץ הפעילויות הקודמות (back stack) כשמבצעים navigate() אליהם ולהסרתם כשקוראים ל-popBackStack() או מפעילים את הכפתור "הקודם" של המערכת. המחלקות הקיימות NavOptions והשילוב שלהן ברשומות <action> בקובץ ה-XML של תרשים ה-Navigation הורחבו כדי לתמוך בשמירה ובשחזור של מקבץ פעילויות קודמות (back stack). (b/80029773)

כחלק מהשינוי הזה, השיטות NavigationUI של onNavDestinationSelected(), ‏ BottomNavigationView.setupWithNavController() ו-NavigationView.setupWithNavController() שומרות עכשיו באופן אוטומטי את המצב של יעדים שהוצאו מהמחסנית ומחזירות אותו, וכך מאפשרות תמיכה בכמה מחסניות חזרה בלי לבצע שינויים בקוד. כשמשתמשים ב-Navigation עם Fragments, זו הדרך המומלצת לשילוב עם כמה מחסניות חזרה. (Ie07ca)

ממשקי ה-API הבסיסיים לשמירה ולשחזור של המצב נחשפים באמצעות מספר פלטפורמות:

  • ב-XML של הניווט, לרכיב <action> יש עכשיו אפשרות להשתמש במאפיינים הבוליאניים app:popUpToSaveState ו-app:restoreState כדי לשמור את המצב של כל היעדים שהוצגו באמצעות app:popUpTo ולשחזר את המצב שמשויך ליעד שהועבר כ-app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ב-navOptions Kotlin DSL, אפשר להוסיף את הנכס הבוליאני 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() וב-overload החדש ל-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 ב-Navigation Compose, וגם ה-FragmentNavigator וה-DynamicFragmentNavigator שמשמשים ליעדי <fragment> ב-Navigation עם Fragments, עודכנו כך שישתמשו בממשקי ה-API החדשים של Navigator ויאפשרו שמירה ושחזור של מצב.

מסלולי ניווט

מסלול הוא String שמזהה יעד באופן ייחודי. בעבר, הרעיון הזה היה רלוונטי רק ל-Navigation Compose, אבל עכשיו הוא הפך לחלק מממשקי ה-API המרכזיים של Navigation. האפשרות הזו מספקת חלופה לשימוש במזהים מספריים כשיוצרים את הגרף באמצעות Navigation Kotlin DSL. (b/172823546)

כל ממשקי ה-API שבעבר קיבלו רק מזהה, כוללים עכשיו עומס יתר שמקבל נתיב String. זה כולל את navigate(),‏ popBackStack(),‏ popUpTo() ו-getBackStackEntry().

השינוי הזה משפיע על ממשקי ה-API:

  • המאפיין popUpTo kotlin ב-Kotlin DSL יצא משימוש, ועכשיו צריך להשתמש במאפיין popUpToId. ‫(I59c73, ‏ b/172823546)
  • הוצאנו משימוש את getStartDestination() API. במקומו, אפשר להשתמש ב-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

  • כל הארטיפקטים של Navigation נכתבו מחדש ב-Kotlin. השינוי הזה שיפר את האפשרות להגדיר ערך null למחלקות שמשתמשות בגנריקס (כמו מחלקות משנה של NavType). כל פונקציות ההרחבה של Kotlin שהיו בעבר חלק מארטיפקטים של -ktx הועברו לארטיפקטים הראשיים המתאימים. פריטי האומנות -ktx ימשיכו להתפרסם, אבל הם יהיו ריקים לחלוטין. (b/184292145)
  • ‫NavDeepLinkBuilder תומך עכשיו בהוספה של כמה יעדים שונים למקבץ פעילויות קודמות (back stack) שנוצר. (I3ee0d, ‏ b/147913689)
  • הוספת פונקציות ליצירת אובייקטים עבור DynamicNavHostFragment (Icd515, ‏ b/175222619)
  • המזהה הייחודי של NavBackStackEntry מוצג עכשיו כחלק מה-API הציבורי שלו. (Ie033a)
  • השדות name ו-argument ופונקציות הפירוק של NamedNavArgument הם עכשיו ציבוריים. (מס' 174, b/181320559)
  • הוספנו תוסף חדש NavBackStackEntry#provideToCompositionLocals שמספק את NavBackStackEntry ללוקאלים הרלוונטיים של הקומפוזיציה. ‫(#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)

שינויים בהתנהגות

  • הניווט תלוי עכשיו במחזור החיים 2.3.1, ועכשיו מסומנים setGraph(), popBackStack(), navigateUp() ו-navigate(), השיטות שמעדכנות את NavBackStackEntry Lifecycle, כ-@MainThread, בהתאם לאכיפה של השרשור הראשי שהוצגה במחזור החיים 2.3.0. (b/171125856)
  • ניתוח של ארגומנטים מסוג Enum מקישורי עומק הוא עכשיו לא תלוי באותיות רישיות, כך שקישור עומק כמו http://www.example.com/red יכול להתאים לקישור עומק www.example.com/{color} גם אם ל-Enum יש את הערך RED. (#152, b/135857840)

תאימות של Compose

  • ‫androidx.navigation:navigation-compose:2.4.0-alpha01 תואם רק ל-Compose מגרסה 1.0.0-beta07 ואילך.

תיקוני באגים

  • תוקנה בעיה שבה מצייני מיקום של ארגומנטים מסוג trailing קיבלו עדיפות על פני קישורי עומק עם סיומת תואמת. (מס' 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 על תיקון בעיה שבה placeholders לארגומנטים בסוף קיבלו עדיפות על פני קישורי עומק עם סיומת מדויקת תואמת. (מס' 153, b/184072811)
  • תודה ל-tatocaster על העדכון של Safe Args כך שיסתמך על KotlinPoet 1.8.0. (מס' 172, b/183990444)
  • תודה ל-jossiwolf על שהפך את השדות name ו-argument ואת פונקציות הפירוק של NamedNavArgument לציבוריים. (מס' 174, ‏ b/181320559)
  • תודה ל-jossiwolf על השקת תוסף NavBackStackEntry#provideToCompositionLocals חדש שמספק את NavBackStackEntry ללוקאלים הרלוונטיים של הקומפוזיציה. ‫(#175, b/187229439)
  • תודה ל-jossiwolf על שיפור ההתנהגות של NavigatorProvider#addNavigator כדי לוודא שקריאה חוזרת לפונקציה עם אותו מופע לא גורמת לבעיות. (מס' 176, b/187443146)

גרסה ‎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)
  • ‫Navigation Compose תלוי עכשיו ב-Navigation 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 שניתן להגדיר כ-nullable, כדי לקבוע טוב יותר אם 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 מכילה את השמירות האלה.

עדכונים של יחסי תלות

גרסה ‎1.0.0-alpha06

‫28 בינואר 2021

‫androidx.navigation:navigation-compose:1.0.0-alpha06 מופץ. גרסה ‎1.0.0-alpha06 מכילה את השמירות האלה.

שינויים ב-API

  • נוספה method להרחבת 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 מכילה את השמירות האלה.

  • העדכון בוצע כדי שתהיה תאימות ל-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 תומכת עכשיו ב-NavOptions לשימוש בפעולות popUpTo ו-launchSingleTop (If96c3, ‏ b/171468994)
  • נוספה פונקציית ניווט שמקבלת מסלול במקום מזהה, ומאפשרת ליצור גרפים מקוננים ב-DSL של Navigation Compose. (I1661d)
  • הפרמטר startDestination מופיע עכשיו לפני הפרמטר route ברשימת הפרמטרים של NavHost ‏ (Ie620e)
  • מעכשיו אפשר ליצור תרשים באמצעות המסלול כיעד התחלתי מחוץ לרכיב NavHost. (Iceb75)

גרסה ‎1.0.0-alpha01

28 באוקטובר 2020

‫android.navigation:navigation-compose:1.0.0-alpha01 מופץ. גרסה 1.0.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

ארטיפקט navigation-compose מספק שילוב בין רכיב הניווט לבין Jetpack Compose. היא משתמשת בפונקציות @Composable כיעדים באפליקציה.

הגרסה הראשונית הזו כוללת:

  • רכיב NavHost שאפשר להשתמש בו כדי ליצור גרף ניווט באמצעות Kotlin DSL.
  • הגדרת היקף של מחזור חיים, ViewModel ומצב שנשמר ברמת היעד.
  • שילוב אוטומטי עם הכפתור "הקודם" במערכת.
  • תמיכה בהעברת ארגומנטים, בצירוף קישורי עומק ליעדים ובהחזרת תוצאה ליעדים קודמים.
  • אפשר ליצור רכיבי עזר ספציפיים ב-rememberNavController() וב-currentBackStackEntryAsState() כדי לאפשר העברה של מצב וחיבור של NavController לרכיבים שניתנים להרכבה מחוץ ל-NavHost (למשל סרגל ניווט תחתון).

מידע נוסף זמין במדריך בנושא Compose Navigation.

גרסה 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 נוסף ל-dispatcher עם NavBackStackEntry בתור LifecycleOwner, ועכשיו הוא מיירט את הפעולה 'חזרה' בצורה תקינה אחרי שה-Activity Lifecycle הוא STOPPED, ואז STARTED (Iff94f,‏ b/182284739)
  • ניתוח הדומיין של קישור העומק לא תלוי יותר באותיות רישיות או קטנות, כך ש-www.example.com תואם גם ל-www.example.com וגם ל-www.Example.com. חשוב לזכור שבשמות של פרמטרים של שאילתות יש הבחנה בין אותיות רישיות לרגילות. (#144, ‏ b/153829033)
  • תוקנה בעיה NullPointerException שיכולה להתרחש כשליעד יש כמה ארגומנטים שברירת המחדל שלהם היא לא null, ואתם עוברים ליעד הזה תוך כדי החלפת קבוצת משנה של הארגומנטים האלה. (aosp/1644827)

עדכונים של יחסי תלות

  • פלאגין Navigation Safe Args Gradle תלוי עכשיו בפלאגין Kotlin Gradle 1.4.31. (aosp/1661058, b/181156413)

External Contribution

  • תודה bentrengrove על בקשת המיזוג שגורמת לניתוח של דומיין קישור עומק להיות לא תלוי באותיות רישיות. (#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)

תיקוני באגים

  • תיקון התקדמות התקנה תקועה כשמשתמשים בתמיכה של Navigation בתכונות דינמיות. (Ib27a7, b/169636207)
  • התקשרות אל setViewModelStore או אל setLifecycleOwner עם אותו אובייקט שכבר הוגדר תהיה עכשיו פעולה ללא שינוי (Idf491, b/177825470)
  • ‫Safe-Args מוסיף עכשיו הערות suppress בשיטות המתאימות כשמשתמשים ב-Java. (I8fbc5, b/179463137)

תכנים ששותפו על ידי משתמשים חיצוניים

  • תודה JvmName על בקשת המיזוג כדי לוודא שעכשיו אפשר לנתח את הארגומנטים של ReferenceType בצורה תקינה כשהם נשלחים כחלק ממזהה URI של קישור עומק. (#127, b/179166693)
  • תודה tatocaster על בקשת המיזוג שמאפשרת ל-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)
  • תוקנה בעיה שבה ניווט לתרשים ניווט מקונן לא יצר מופע חדש של התרשים במקבץ פעילויות קודמות (back stack). (Ifc831)
  • נפתרה בעיה שבה שימוש ב-navigate() עם popUpTo שהסיר את היעד האחרון בתרשים ניווט לא גרם להשמדה ולהסרה מיידיות של תרשים הניווט עצמו ממחסנית החזרה. (I910a3)
  • ‫Navigation SafeArgs משתמש עכשיו ב-KotlinPoet בגרסה 1.7.2, שמוסיפה תמיכה במצב ה-API המפורש של Kotlin. (I918b5)
  • ‫NavHostFragment.findNavController(Fragment) בודק עכשיו גם את תצוגת העיצוב הבסיסית של DialogFragment, בנוסף לבדיקות הקיימות של היררכיית Fragment והיררכיית התצוגה של Fragment. כך תוכלו לבדוק קטעי דיאלוג שמשתמשים ב-Navigation עם FragmentScenario ו-Navigation.setViewNavController(). (I69e0d)

גרסה 2.3.1

גרסה 2.3.1

‫14 באוקטובר 2020

‫androidx.navigation:navigation-*:2.3.1 מופץ. גרסה 2.3.1 מכילה את השמירות האלה.

תכונות חדשות

  • משאבי Animator שמוגדרים כברירת מחדל נוספו לממשק המשתמש של הניווט, והם מומלצים יותר ממשאבי האנימציה שמוגדרים כברירת מחדל. (b/167430145)
  • האפשרות NavOptions מחליפה עכשיו את השיטות hashcode ו-equals (b/161586466)
  • הניווט כולל עכשיו את היעד הנוכחי ב-IllegalArgumentException 'אין יעד עם מזהה', מה שאמור לשפר את חוויית הניפוי באגים של המפתחים. (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)

גרסה 2.3.0

גרסה 2.3.0

‫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 שמשויך לכל יעד במחסנית ההיסטוריה של הניווט מאפשר עכשיו גישה אל SavedStateHandle שמתאים לאחסון כמויות קטנות של מצב שמור שצריך להיות משויך לרשומה מסוימת במחסנית ההיסטוריה. מידע נוסף זמין במאמר בנושא החזרת תוצאה ליעד הקודם.
  • תמיכה ב-NavigationUI Openable: כל השימושים ב-DrawerLayout ב-NavigationUI הוחלפו בממשק הגנרי יותר Openable שנוסף ב-CustomView 1.1.0 ומיושם על ידי DrawerLayout ב-DrawerLayout 1.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)

עדכונים של יחסי תלות

גרסה ‎2.3.0-alpha06

29 באפריל 2020

‫androidx.navigation:navigation-*:2.3.0-alpha06 מופץ. (גרסה ‎2.3.0-alpha06 מכילה את השמירות האלה).

תכונות חדשות

  • הרחבנו את התמיכה בקישורי עומק כך שתכלול את app:action וapp:mimeType בנוסף ל-app:uri שהיו זמינים קודם. המחלקות החדשות NavDeepLinkRequest מאפשרות ל-NavController לתמוך עכשיו בניווט באמצעות כל שילוב של השדות האלה. ‫(b/136573074, b/135334841)

שינויים ב-API

  • הרחבנו מאוד את התמיכה ב-Kotlin DSL ליעדי ניווט דינמיים. (b/148969800)

תיקוני באגים

  • תוקנה בעיה שגרמה להתעלמות מ-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, יש עכשיו תמיכה ב-placeholder של ${applicationId}. (b/152696768)
  • ‫Kotlin DSL של תרשים הניווט חושף עכשיו defaultArguments Map לפעולות, ומשקף את היכולת להגדיר ערכי ברירת מחדל ברכיבי <action> בקובצי XML של ניווט. (b/150345605)

תיקוני באגים

  • ‫Navigation 2.2.2: תוקן באג IllegalStateException כשמבצעים קישור עמוק ליעד ההתחלתי של הגרף כשקיימים כמה מופעים של NavHostFragment בפעילות. (b/147378752)

עדכונים של תלות

גרסה ‎2.3.0-alpha04

‫18 במרץ 2020

‫androidx.navigation:navigation-*:2.3.0-alpha04 מופץ. גרסה ‎2.3.0-alpha04 מכילה את השמירות האלה.

תכונות חדשות

  • נוספה תמיכה בפעילות של מודול תכונות ובמקומות ליעד של קטע ב-Navigation Kotlin DSL. (b/148969800)

שינויים ב-API

  • המחלקות DynamicExtras כבר לא משתמשות בתבנית builder, ועכשיו אפשר ליצור אותן ישירות. (aosp/1253671)
  • הפונקציה 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 שהוצג ב-CustomView 1.1.0-alpha02 (ש-DrawerLayout מטמיע החל מ-DrawerLayout 1.1.0-alpha04), וכך מאפשר לכם להשתמש בהטמעות מותאמות אישית של Openable עם NavigationUI. (b/129030452)

תיקוני באגים

  • כללי navigation-common-ktx ProGuard שומרים עכשיו רק את המחלקות NavArgs שנמצאות בשימוש ולא את כל המופעים NavArgs. (b/150213558)

שינויים בתלות

  • התלות של Navigation ב-Core 1.2.0 בוטלה, ועכשיו היא תלויה ב-Core 1.1.0. זאת כדי שלא לכפות על מפתחים לעבור לתלות חדשה יותר כש-Navigation לא תלוי באף ממשק API חדש ב-Core 1.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)

שינויים בתלות

גרסה ‎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: The navigation-ui ProGuard rules for DrawerArrowDrawable have been updated to ensure that android.enableJetifier=true is not required. (b/147610424)
  • מתוך Navigation 2.2.1: למודול navigation-common-ktx יש עכשיו שם חבילה ייחודי במניפסט, במקום לשתף את אותו שם חבילה במניפסט עם navigation-runtime-ktx. (aosp/1141947)

עדכונים של תלות

גרסה 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)
  • כללי navigation-common-ktx ProGuard שומרים עכשיו רק את המחלקות NavArgs שנעשה בהן שימוש, ולא את כל המופעים NavArgs. התכונה הזו פורסמה בעבר בגרסה Navigation 2.3.0-alpha03. (b/150213558

עדכונים של תלות

גרסה 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.0

גרסה 2.2.0

‫22 בינואר 2020

‫androidx.navigation:navigation-*:2.2.0 מופץ. גרסה 2.2.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 2.1.0

  • ‫NavBackStackEntry: עכשיו אפשר להתקשר אל NavController.getBackStackEntry() ולהעביר את המזהה של יעד או של תרשים ניווט במקבץ הפעילויות הקודמות (back stack). הערך שמוחזר NavBackStackEntry מספק LifecycleOwner מונחה-ניווט, ViewModelStoreOwner (אותו ערך שמוחזר על ידי NavController.getViewModelStoreOwner()) וSavedStateRegistryOwner, בנוסף לארגומנטים ששימשו להפעלת היעד הזה.
  • שילוב של Lifecycle ViewModel SavedState: SavedStateViewModelFactory הוא עכשיו הפקטורי (factory) שמוגדר כברירת מחדל כשמשתמשים ב-by navGraphViewModels() או ב-constructor ViewModelProvider עם ViewModelStoreOwner שמוחזר על ידי NavController.getBackStackEntry() או NavController.getViewModelStoreOwner().
  • תמיכה בפרמטרים של שאילתות בקישורי עומק: קישורי עומק עם פרמטרים של שאילתות תומכים עכשיו בפרמטרים של שאילתות שסודרו מחדש. ארגומנטים שיש להם ערך ברירת מחדל או שהם ניתנים לאיפוס הם עכשיו אופציונליים כשמבצעים התאמה של קישורי עומק.
  • תמיכה משופרת באנימציות: NavHostFragment משתמש עכשיו ב-FragmentContainerView מ-Fragment 1.2.0, ומתקן בעיות של אנימציות ב-z-ordering ושליחה של חלונות ב-insets ל-Fragments.

גרסה ‎2.2.0-rc04

18 בדצמבר 2019

‫androidx.navigation:navigation-*:2.2.0-rc04 מופץ. גרסה ‎2.2.0-rc04 מכילה את השמירות האלה.

תיקוני באגים

  • התאמנו את אנימציות המעבר המוגדרות כברירת מחדל שמשמשות את navigation-ui כך שיתאימו לאנימציות המעבר המותאמות ב-Fragment 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 SavedState 1.0.0-rc03, ב-Activity 1.1.0-rc03 וב-Fragment 1.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)
  • הודעת השגיאה בתוסף navArgs() Kotlin ב-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 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תכונות חדשות

  • קישורי עומק עם פרמטרים של שאילתה תומכים עכשיו בפרמטרים של שאילתה שסודרו מחדש. ארגומנטים שיש להם ערך ברירת מחדל או שהם יכולים להיות null הם עכשיו אופציונליים כשמבצעים התאמה לקישורי עומק. (b/133273839)
  • עכשיו אפשר להתקשר אל NavController.getBackStackEntry() ולהעביר את המזהה של יעד או של גרף ניווט במקבץ הפעילויות הקודמות (back stack). הערך המוחזר 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 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תכונות חדשות

  • ‫SavedStateViewModelFactory היא עכשיו ברירת המחדל של המפעל שמשמש כשמשתמשים ב-by navGraphViewModels() או ב-constructor‏ ViewModelProvider עם ViewModelStoreOwner שמוחזר על ידי NavController.getViewModelStoreOwner(). (b/135716331)

שינויים ב-API

תיקוני באגים

  • ‫NavHostFragment משתמש עכשיו ב-FragmentContainerView, וכך נפתרו בעיות בסדר האנימציה בציר ה-Z ובעיות בשליחת חלונות ל-Fragments. (b/137310379)

גרסה 2.1.0

גרסה 2.1.0

‫5 בספטמבר 2019

‫androidx.navigation:navigation-*:2.1.0 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

שינויים חשובים מאז גרסה 2.0.0

  • הגדרת היקף של ViewModels לתרשים ניווט: עכשיו אפשר ליצור ViewModels עם היקף ברמת תרשים הניווט באמצעות נציג המאפיינים by navGraphViewModels() למשתמשי Kotlin שמשתמשים בספריות -ktx, או באמצעות getViewModelStoreOwner() API שנוסף ל-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 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

שינויים ב-API

  • הסרנו את getViewModelStore() API שהוצא משימוש ב-NavController, שהוצג ב-2.1.0-alpha02. (aosp/1091021)

גרסה ‎2.1.0-beta02

‫19 ביולי 2019

‫androidx.navigation:*:2.1.0-beta02 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תיקוני באגים

  • הוסרה תלות לא מכוונת ב-jacoco שהוצגה ב-2.1.0-beta01. (b/137782950)

גרסה ‎2.1.0-beta01

‫17 ביולי 2019

‫androidx.navigation:*:2.1.0-beta01 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תכונות חדשות

  • NavigationUI עכשיו יש אנימציה להסרה של לחצן החזרה למעלה כשמשתמשים ב-setupWithNavController() עם Toolbar או CollapsingToolbarLayout. (b/131403621)

תיקוני באגים

  • תוקנה בעיה בתזמון כשמשתמשים בכמה NavHostFragments עם אותו מאגר באמצעות findNavController(). (b/136021571)

גרסה ‎2.1.0-alpha06

‫2 ביולי 2019

‫androidx.navigation:*:2.1.0-alpha06 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תכונות חדשות

  • המאפיין app:navGraph שבו נעשה שימוש על ידי NavHostFragment הועבר עכשיו אל ארטיפקט navigation-runtime. כדי להוסיף רכיבי ניווט מותאמים אישית באמצעות XML, צריך להשתמש במאפיין הזה כדי לשלב אותם בחלונית Host (מארח) בכלי לעריכת ניווט. (b/133880955)

שינויים ב-API

  • הוצאנו משימוש את getViewModelStore() API ב-NavController לטובת השיטה החדשה getViewModelStoreOwner() שמחזירה ViewModelStoreOwner. (aosp/987010)
  • ההטמעה של יעדים בחלון צף, כמו יעדי <dialog>, עברה הכללה לממשק סמן, FloatingWindow, שכל יעדי <dialog> מטמיעים עכשיו. השיטות של NavigationUI לאינטראקציה עם סרגל האפליקציות העליון מתעלמות עכשיו מיעדי FloatingWindow. (b/133600763)

שינויים בהתנהגות

  • הניווט מסונכרן עכשיו בצורה נכונה עם מה שמוצג במסך כשמשתמשים ביעד <dialog>. כתוצאה מכך, אפליקציית הניווט קופצת עכשיו באופן אוטומטי ליעדים של <dialog> כשמנווטים ליעד שאינו תיבת דו-שיח או פעילות, כמו יעד של <fragment>. (b/134089818)

תיקוני באגים

  • הניווט מדכא עכשיו את האנימציה שמתרחשת כשיוצרים מחדש את הפעילות בזמן טיפול בקישור עומק, וכך נפתרה בעיה של הבהוב ויזואלי. (b/130362979)
  • תוקן באג שגרם לכך שמקבץ פעילויות קודמות (back stack) של Navigation לא היה מסונכרן כשמבטלים את ההוספה של Fragment כשהוא מתווסף כ-Fragment ראשוני. (b/133832218)

גרסה ‎2.1.0-alpha05

‫5 ביוני 2019

‫androidx.navigation:*:2.1.0-alpha05 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

שינויים ב-API

  • ממשקי API שקשורים למארח ב-NavController קיבלו שם חדש והועברו למחלקה משנית חדשה של NavController, ‏ NavHostController. ‪(aosp/966091)
  • השיטה NavController setHostOnBackPressedDispatcherOwner() הוחלפה בשיטה setOnBackPressedDispatcher() של NavHostController, ועכשיו צריך להפעיל את השיטה setLifecycleOwner() לפני שמפעילים אותה. (aosp/965409)
  • ‫NavHostController מכיל עכשיו שיטה enableOnBackPressed(boolean) שמחליפה את המחלקה NavHostOnBackPressedManager שהוחזרה קודם על ידי setHostOnBackPressedDispatcherOwner(). ‪(aosp/966091)

תיקוני באגים

  • תוקנה בעיה שבה מקבץ פעילויות קודמות (back stack) לא היה נכון אחרי ניווט באמצעות URI. (b/132509387)
  • קישורי עומק שמטופלים אוטומטית על ידי NavController מופעלים עכשיו רק פעם אחת. (b/132754763)

גרסה ‎2.1.0-alpha04

‫16 במאי 2019

‫androidx.navigation:*:2.1.0-alpha04 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תיקוני באגים

  • ‫NavHostFragment מכבדת את app:defaultNavHost בצורה נכונה כשהיא מיירטת את האירועים של הכפתור "הקודם" במערכת, וכך מתקנת רגרסיה ב-Navigation 2.1.0-alpha03. b/132077777
  • ‫DialogFragmentNavigator מטפל עכשיו בצורה נכונה בפעולות popBackStack() ו-navigateUp(). b/132576764
  • תוקנה בעיה ב-IllegalStateException: unknown destination during restore שמתרחשת כשעוברים שוב ושוב בין גרפים מוטמעים. b/131733658

גרסה ‎2.1.0-alpha03

‫7 במאי 2019

‫androidx.navigation:*:2.1.0-alpha03 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

בעיות מוכרות

  • ‫NavHostFragment ממשיך ליירט את הכפתור 'הקודם' במערכת למרות השימוש ב-app:defaultNavHost="false" b/132077777

תכונות חדשות

  • עכשיו אפשר ליצור יעדים של <dialog> שיוצג בהם DialogFragment כשnavigate אליהם. ‫NavHostFragment תומך ביעדים של תיבות דו-שיח כברירת מחדל. b/80267254
  • בנוסף לקריאה לפונקציה navigate עם מזהה משאב או מופע NavDirections, עכשיו אפשר לנווט באמצעות Uri, שמשתמש ב-<deepLink> שהוספתם ליעד כדי לנווט ליעד הנכון. b/110412864

שינויים בהתנהגות

  • האנימציות שמוגדרות כברירת מחדל ב-NavigationUI הואצו מ-400ms ל-220ms כדי להתאים למהירות האנימציה שמוגדרת כברירת מחדל בפעילויות ובקטעים. b/130055522

שינויים ב-API

  • השיטה createFragmentNavigator() של NavHostFragment הוצאה משימוש, והפונקציונליות שלה הועברה לשיטה החדשה onCreateNavController(), כדי להבהיר שזו נקודת הכניסה הנכונה להוספת רכיבי ניווט בהתאמה אישית כשיוצרים מחלקת משנה של NavHostFragment. b/122802849
  • נוסף קוד ה-method‏ hasDeepLink() ל-NavDestination כדי לאפשר לכם לבדוק אם אפשר לטפל ב-Uri מסוים ביעד הזה, או במקרה של NavGraph, בכל יעד בתרשים הניווט. b/117437718

תיקוני באגים

  • ארגומנטים שמוגדרים כברירת מחדל מועברים עכשיו בצורה תקינה למופעים של OnDestinationChangedListener. b/130630686
  • ‫NavHostFragment מיירטת עכשיו אירועי חזרה של המערכת באמצעות 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 מופץ. כאן אפשר לראות את השמירות שכלולות בגרסה הזו.

תכונות חדשות

  • משתמשי Kotlin יכולים ליצור עכשיו ViewModels בהיקף של גרף ניווט באמצעות נציג המאפיינים by navGraphViewModels(), או באמצעות ה-API‏ getViewModelStore() שנוסף ל-NavController. b/111614463

שינויים ב-API

  • עכשיו אפשר להוסיף app:targetPackage ליעד <activity> כדי להגביל את שם החבילה התואם. הוא תומך ב-app:targetPackage="${applicationId}" להגבלת החבילה למזהה האפליקציה שלכם. b/110975456

תיקוני באגים

  • ה-android:name ליעדי <activity> לא מנותח יותר לסיווג בזמן האינפלציה, וכך נמנעות שגיאות ClassNotFoundException כשמשתמשים בתכונות דינמיות. b/124538597

גרסה ‎2.1.0-alpha01

‫19 במרץ 2019

זו גרסת האלפא הראשונה של הניווט 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) כחלופה ליצירת רכיב click listener עם מזהה משאב וחבילה. 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 היציבה.

Pre-AndroidX Dependencies

בגרסאות של 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 top level

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 בצורה נכונה כשמוציאים את היעד האחרון ממקבץ פעילויות קודמות (back stack), וכך מתקנים רגרסיה שנוצרה בגרסה 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. מעכשיו, ה-API של Navigation צפוי להישאר יציב עד לגרסה הבאה, אלא אם תהיה בעיה קריטית. הגרסה הזו כוללת כמה תיקוני באגים ושינויים בהתנהגות.

שינויים בהתנהגות

  • הניווט מבטיח עכשיו שערכי ברירת המחדל של הארגומנטים יטופלו באופן זהה בזמן הריצה ובאמצעות 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() הוציאה את כל העותקים של היעד מראש מקבץ פעילויות קודמות (back stack), במקום רק יעד אחד בכל פעם. b/123552990
  • תוקנה בעיה שגרמה למצב FragmentNavigator לצאת מסינכרון עם המצב של NavController, וכתוצאה מכך נוצרה שגיאה IllegalStateException כשניסו לשחזר את מקבץ הפעילויות הקודמות (back stack). 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.

תיקוני באגים

  • תוקנה בעיה שגרמה לכשל בייבוא של המחלקה Directions שמשויכת לפעולות גלובליות ב-Safe Args. b/123307342

גרסה ‎1.0.0-alpha10

‫23 בינואר 2019

בעיות מוכרות

  • הייבוא של המחלקה Directions שמשויכת לפעולות גלובליות נכשל ב-Safe Args. b/123307342

הגרסה הזו כוללת שינויים בממשקי ה-API שעלולים לגרום לכשל. מידע נוסף מופיע בקטע שינויים שעלולים לגרום לכשל שבהמשך.

תכונות חדשות

  • משתמשי Kotlin יכולים עכשיו להשתמש ב-by navArgs() property delegate כדי לקבל באופן עצלני הפניה למחלקת NavArgs שנוצרה על ידי Safe Args ב-Activity או ב-Fragment. b/122603367
  • התוסף Safe Args מאפשר עכשיו ליצור קוד Kotlin על ידי החלת התוסף androidx.navigation.safeargs.kotlin. קוד Kotlin נוצר במיוחד למודולים של Kotlin בלבד, באמצעות ארגומנטים שמוגדרים כברירת מחדל ומחלקות שלא ניתן לשנות, במקום תבנית ה-builder שעדיין זמינה דרך הפלאגין הקודם androidx.navigation.safeargs. b/110263087

שינויים בהתנהגות

  • קישורי עומק תואמים מוטים עכשיו לקישור העומק עם הכי הרבה ארגומנטים תואמים. b/118393029
  • מעכשיו, כשמתקשרים אל setGraph() בNavController, מחסנית החזרה מאופסת. b/111450672
  • קישורי עומק לא ידועים לא גורמים יותר לשגיאה IllegalStateException, אלא מתעלמים מהם. כך נפתרות בעיות שקשורות לקישורי עומק מוטמעים או מרובים מסוג 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 מטפל עכשיו בצורה נכונה בכמה PendingIntents בו-זמנית לאותו יעד באמצעות הארגומנטים שמעבירים כדי לקבוע את הייחודיות. b/120042732
  • ‫NavController מטפל עכשיו בצורה נכונה בפעולות popBackStack() כשמשתמשים ב-NavHostFragment מקונן או ב-Fragments אחרים של צאצא עם מקבץ פעילויות קודמות (back stack). b/122770335
  • ‫NavigationUI עכשיו מוגדר בצורה נכונה תיאור התוכן של לחצן 'למעלה'. b/120395362
  • מחלקות Directions שנוצרו על ידי Safe Args מטפלות עכשיו בצורה נכונה בפעולות גלובליות עם אותו מזהה כמו פעולה ביעד. b/122962504
  • מחלקות NavDirections שנוצרו על ידי Safe Args כוללות עכשיו ערכים שווים hashCode() בצורה נכונה כש-equals() מחזירה את הערך true. b/123043662
  • FragmentNavigator עכשיו מוצגת הודעת שגיאה טובה יותר אם מנסים לבצע התאמה אישית של FragmentTransactions ב-NavHostFragment's FragmentManager. תמיד צריך להשתמש בgetChildFragmentManager(). b/112927148

גרסה ‎1.0.0-alpha09

‫18 בדצמבר 2018

הגרסה הזו כוללת שינויים בממשקי ה-API שעלולים לגרום לכשלים. מידע נוסף זמין בקטע שינויים שעלולים לגרום לכשלים שבהמשך.

החלטנו שלא להמשיך בפיתוח של ארטיפקט android.arch.navigation:navigation-testing. הוכח שהשיטה הזו מועילה לבדיקות פנימיות של NavController, אבל אנחנו ממליצים מאוד להשתמש בשיטות בדיקה חלופיות, כמו יצירת מוקאפ של מופע NavController כדי לוודא שמתבצעות קריאות נכונות ל-navigate(). הגישה הזו מוסברת בפירוט בהרצאה בנושא Single Activity בכנס AndroidDevSummit 2018. אנחנו עובדים על מסמכים נוספים בנושא בדיקות באמצעות Navigation.

תכונות חדשות

  • ‫MenuItems עם menuCategory="secondary" לא יקפיצו יותר את מחסנית החזרה כשמשתמשים בהם עם שיטות NavigationUI. b/120104424
  • מעכשיו אפשר להגדיר ב-AppBarConfiguration מופע OnNavigateUpListener חלופי שיופעל כש-navController.navigateUp() מחזיר false. b/79993862 b/120690961

שינויים שעלולים לגרום לכשלים

  • כשמשתמשים ב-<argument> עם argType="reference", הניווט כבר לא מנתח את ההפניה, אלא מספק את מזהה המשאב הגולמי עצמו. b/111736515
  • ‫onNavDestinationSelected() עכשיו, כברירת מחדל, הפעולה מחזירה אתכם ליעד ההתחלתי של תרשים הניווט, כך שהיא עקבית עם השיטות של setup. כדי למנוע את הפעלת מקבץ הפעילויות הקודמות (back stack), צריך להוסיף את menuCategory="secondary" אל MenuItem. aosp/852869
  • ה-methods‏ fromBundle() של מחלקות Args שנוצרו מקבלות עכשיו Bundle שאינו null במקום Bundle שניתן להגדיר כ-null‏ aosp/845616

תיקוני באגים

  • ארגומנטים מנותחים עכשיו בצורה תקינה מקישורי עומק כערך הנכון argType במקום תמיד כמחרוזות b/110273284
  • עכשיו אפשר לייצא את המשאבים הציבוריים של הניווט בצורה תקינה b/121059552
  • ‫Safe Args תואם עכשיו ל-פלאגין של Android Gradle 3.4 Canary 4 ומעלה b/119662045

גרסה ‎1.0.0-alpha08

‫6 בדצמבר 2018

הגרסה הזו כוללת שינויים בממשקי ה-API שעלולים לגרום לכשלים. מידע נוסף זמין בקטע שינויים שעלולים לגרום לכשלים שבהמשך.

תכונות חדשות

  • כשמשתמשים בתוויות יעד עם NavigationUI שיטות, הן מחליפות עכשיו באופן אוטומטי מופעים של {argName} ב-android:label עם הארגומנט הנכון b/80267266
  • הניווט תלוי עכשיו בספריית התמיכה 28.0.0 b/120293333

שינויים שעלולים לגרום לכשלים

  • השם של OnNavigatedListener השתנה לשם OnDestinationChangedListener b/118670572
  • הפונקציה OnDestinationChangedListener מעבירה עכשיו גם את Bundle של הארגומנטים aosp/837142
  • המאפיינים app:clearTask ו-app:launchDocument וה-methods שמשויכים אליהם הוסרו. אפשר להשתמש ב-app:popUpTo עם הרמה הבסיסית (root) של הגרף כדי להסיר את כל היעדים ממקבץ הפעילויות הקודמות (back stack). 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 3.2.1. b/113167627
  • מעכשיו אפשר ליצור הוראות הגעה לכיתות פנימיות. b/117407555
  • תוקנה בעיה שקשורה ליצירת מסלולים לגרף מסוג <include>. b/116542123

גרסה ‎1.0.0-alpha06

‫20 בספטמבר 2018

תכונות חדשות

שינויים ב-API

  • שינוי שעלול לגרום לבעיות: ה-method‏ Navigator navigate() מקבל עכשיו פרמטר Navigator.Extras.
  • השיטה getGraph() של NavController היא עכשיו NonNull b/112243286

תיקוני באגים

  • ‫NavigationUI.setupWithNavController() לא עוד דליפות של תצוגות אם משתמשים בה עם תצוגות מיעדים ספציפיים b/111961977
  • הפונקציה Navigator onSaveState() נקראת עכשיו רק פעם אחת b/112627079

‫Safe Args

  • מחלקות של יעד ניווט Directions מרחיבות עכשיו את מחלקת האב שלהן Directions אם היא קיימת b/79871405
  • במחלקות Directions ו-Args יש עכשיו הטמעה שימושית toString() b/111843389

גרסה ‎1.0.0-alpha05

‫10 באוגוסט 2018

תיקוני באגים

  • תוקן באג שגרם להתנהגות שגויה של היסטוריית הפעולות. b/111907708
  • תיקון באג ב-equals() של מחלקות Generated Args. b/111450897
  • תוקנה תקלה ב-build ב-Safe Args. b/109409713
  • תיקון המרה ממזהי משאבים לשמות Java‏ b/111602491
  • איך פותרים הודעות שגיאה לגבי אפשרות קבלת ערך null בתוסף Safe Args.
  • הוספת אנוטציות חסרות לגבי מאפיין המציין אם ערך יכול להיות ריק (nullability).

גרסה ‎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 עבור Toolbar‏ b/109868820
  • נוספה שיטה NavigationUI.setupWithNavController ל-CollapsingToolbarLayout‏ b/110887183
  • הפונקציה popBackStack() מחזירה עכשיו false כשהמקבץ פעילויות קודמות (back stack) ריק או כשמזהה היעד שצוין לא נמצא במקבץ פעילויות קודמות (back stack) b/110893637
  • ‫FragmentNavigator מתעלם עכשיו מפעולות ניווט אחרי ש-FragmentManager שמר את המצב, וכך נמנעים חריגים מסוג Can not perform this action after onSaveInstanceState b/110987825

Safe Args

  • שינוי שובר תאימות: תווים לא אלפאנומריים בשמות של פעולות וארגומנטים יוחלפו בשיטת CamelCase בשמות המתודות המתאימות של NavDirections
    • לדוגמה, DemoController.index יהפוך ל-setDemoControllerIndex b/79995048
    • לדוגמה, action_show_settings יהפוך ל-actionShowSettings b/79642240
  • שינוי משמעותי: ארגומנטים נחשבים עכשיו כלא ריקים כברירת מחדל. כדי לאפשר ערכי null בארגומנטים של מחרוזות ושל parcelable, מוסיפים app:nullable="true" b/79642307
  • עכשיו אפשר להשתמש ב-app:type="long" עם defaultValues בפורמט '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 בטא 01 מוסיף עכשיו כללי שמירה לכל מאפיין android:name בקובצי XML של Navigation b/79874119
  • תוקנה דליפת זיכרון בהחלפת FragmentNavigator שמוגדר כברירת מחדל b/110900142

גרסה ‎1.0.0-alpha02

‫7 ביוני 2018

שינויים בהתנהגות

  • הבית FragmentNavigator משתמש עכשיו במינוי setReorderingAllowed(true). b/109826220

  • הניווט מבצע עכשיו URLDecode לארגומנטים שמנותחים מכתובות URL של קישורי עומק. b/79982454

תיקוני באגים

  • תוקנה בעיה IllegalStateException כשמתקשרים לניווט משיטות מחזור החיים של Fragment. b/79632233

  • הניווט מסתמך עכשיו על ספריית תמיכה 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

Navigation מספק מסגרת לבניית ניווט בתוך האפליקציה. הגרסה הראשונית הזו היא 1.0.0-alpha01.