ניווט

'ניווט' הוא מסגרת לניווט בין 'יעדים' באפליקציית Android, שמספקת ממשק API עקבי בין אם היעדים מיושמים כקטעי Fragment, כפעילויות או כרכיבים אחרים.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסה אלפא
13 בנובמבר 2024 2.8.4 - - 2.9.0-alpha03

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

כדי להוסיף תלות ב-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.8.4"

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

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

如需将 Safe Args 添加到您的项目,请在顶层 build.gradle 文件中包含以下 classpath

Groovy

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

Kotlin

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

您还必须应用以下两个可用插件之一。

如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块build.gradle 文件中:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:

Groovy

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

Kotlin

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

根据迁移到 AndroidX 文档,您的 gradle.properties 文件中必须具有 android.useAndroidX=true

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

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

משוב

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

דיווח על בעיה חדשה

מידע נוסף זמין במסמכי התיעוד של Issue Tracker.

גרסה 2.9

גרסה 2.9.0-alpha03

13 בנובמבר 2024

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

תכונות חדשות

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

תיקוני באגים

  • תוקנה בעיה מסוג ConcurrentModificationException שעלולה להתרחש כאשר LifecycleObserver שמחובר ל-NavBackStackEntry מפעיל שינוי בסטאק העורפי כשהמארח LifecycleOwner, כמו הפעילות או הפלח שמכילים את ה-Activity, משנים את מצב מחזור החיים שלהם. (Ia9494)

גרסה 2.9.0-alpha02

30 באוקטובר 2024

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

תרומה חיצונית

  • שיטה נפוצה חדשה של NavController.handleDeepLink(request: NavDeepLinkRequest). תודה Konstantin Tskhovrebov! (I3e228)

גרסה 2.9.0-alpha01

16 באוקטובר 2024

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

תכונות חדשות

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

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

  • ניסיון להשתמש ב-NavController שעבר DESTROYED יגרום עכשיו ל-IllegalStateException. (I520da, ‏ b/369616172)

תיקוני באגים

  • עדכון של חריגה מסוג Enum class not found, כדי להציע להשתמש בהערה @Keep במקרה שמחלקת Enum נמחקת בגרסאות build מקוצרות. (I90e79, ‏ b/358137294)

בעיות מוכרות

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

גרסה 2.8

גרסה 2.8.4

13 בנובמבר 2024

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

תכונות חדשות

תיקוני באגים

גרסה 2.8.3

16 באוקטובר 2024

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

תכונות חדשות

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

תיקוני באגים

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

בעיות מוכרות

  • כשמנסים להריץ בדיקת איתור שגיאות בקוד (lint) עם Lint 16 (AGP 8.7) ואילך, תופיע שגיאה מסוג Obsolete custom lint check ב-Navigation lint. (b/371926651)

גרסה 2.8.2

2 באוקטובר 2024

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

תכונות חדשות

  • התכונה Navigation Type Safety תומכת עכשיו בסוגי Serializable שכוללים Double, ‏ Double?, ‏ DoubleArray, ‏ DoubleArray?, ‏ List<Double> ו-List<Double>?, בלי צורך ב-NavType מותאם אישית. (I570eb, ‏ Ibc4c0, ‏ I37461, ‏ I5bed4, ‏ b/359245753)

תיקוני באגים

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

גרסה 2.8.1

18 בספטמבר 2024

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

תכונות חדשות

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

תיקוני באגים

  • עכשיו, כדי לנווט, המסלול שמעבירים ל-startDestination של NavGraph צריך להכיל את הערכים של כל הארגומנטים הנדרשים, כולל ארגומנטים שלא יכולים להיות null ואין להם ערך ברירת מחדל. (I18e74, ‏ b/362594265)
  • נוספה תמיכה במחרוזות שלא יכולות להיות null ל-Navigation safe args, כך שערכים null ימוינו ויאוחסנו בחבילה כפי שהם. זה שונה מההתנהגות הקיימת, שבה ערכים null מפורקים לאובייקט null. השינוי הזה רלוונטי רק לסוגי String שאינם ניתנים לאפס. מחרוזות שניתן להגדיר להן ערך null לא משתנות. (I08b4a, ‏ b/348936238)
  • אי אפשר יותר להוסיף קישור עומק ל-NavDestination, אלא רק דרך קישור עומק שנוסף במפורש ליעד. המשמעות היא שאפשר לנווט למסלול של יעד רק באמצעות עומס יתר של פונקציית הניווט שמקבלת מסלול מחרוזת. התיקון הזה מתקן נקודת חולשה שאפשרה ליצור קישור עומק ליעד שעשוי להיות מוגן. (Ie30e6)

עדכון יחסי תלות

  • Navigation Safe Args תלוי עכשיו ב-Kotlin 1.9.24, ולא ב-Kotlin 2.X, כדי למנוע מהמפתחים צורך לעדכן את הקוד. (a4129a)
  • עכשיו, כדי לכתוב אימייל חדש, צריך ללחוץ על כתיבה 1.7.2.

גרסה 2.8.0

4 בספטמבר 2024

androidx.navigation:navigation-*:2.8.0 משוחרר. גרסה 2.8.0 כוללת את ההוספות האלה.

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

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

  • מעכשיו, Navigation מספק תמיכה ב-type safety ל-DSL של Kotlin (שמשמש את Navigation Compose) באמצעות Kotlin Serialization, כדי לאפשר לכם להגדיר יעדים בתרשים הניווט באמצעות אובייקטים וסיווגים של נתונים בטוחים מבחינת סוגים:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

מידע נוסף זמין בפוסט Navigation Compose meet Type Safety.

ניווט כתיבה חיזוי חזרה

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

Navigation Fragment Composable

  • הוספנו פריט navigation-fragment-compose חדש שכולל חלופה ל-ComposableNavHostFragment של NavHostFragment, שמאפשרת להוסיף יעדים שניתנים ליצירה לקבצי ה-XML של הניווט. כל יעד composable צריך להיות מפורט כשיטת @Composable ברמה העליונה ללא ארגומנטים, שהשם המלא שלה משמש כמאפיין android:name בכל יעד. כשמנווטים לאחד מהיעדים האלה, נוצר קטע מכיל כדי להציג את התוכן הקומפוזבילי.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

שינויים אחרים

  • Navigation Compose תלוי עכשיו ב-Compose 1.7.0.
  • ב-Navigation יש עכשיו סוג חדש, CollectionNavType<T>, שהוא תת-סוג של NavType<T> לארגומנטים שמבוססים על אוספים, כמו רשימות, מערכי נתונים ומפות. כל מערכי NavType שמוגדרים כברירת מחדל (IntArrayType,‏ LongArrayType,‏ FloatArrayType,‏ BoolArrayType ו-StringArrayType) יורשים עכשיו מהקלאס החדש הזה.
  • NavType כולל עכשיו תמיכה מובנית ברשימות של Int,‏ String,‏ Boolean,‏ Float ו-Long.

גרסה 2.8.0-rc01

21 באוגוסט 2024

androidx.navigation:navigation-*:2.8.0-rc01 משוחרר. גרסת 2.8.0-rc01 כוללת את ההוספות האלה.

תיקוני באגים

  • תיקון קריסה בניווט כשמעבירים כיתות Enum ברמה העליונה כארגומנטים בטוחים לסוג. (I0ba76, ‏ b/358137294)
  • הגרסה 2.8 של Navigation פועלת עכשיו בצורה תקינה עם SDK 34, והיא לא תעבור ל-SDK 35 עד לפרסום הגרסה 2.9, יחד עם שאר ספריות AndroidX. (b/358798728)

גרסה 2.8.0-beta07

7 באוגוסט 2024

androidx.navigation:navigation-*:2.8.0-beta07 משוחרר. גרסת 2.8.0-beta07 כוללת את ההוספות האלה.

בעיות מוכרות

  • עקב הבעיה ב-b/358137294, יש תמיכה מובנית רק ב-Enums שמוטמעים בתוך כיתה אחרת. תמיכה ב-Enums ברמה העליונה תתווסף במהדורה הבאה.

תיקוני באגים

  • כשמנווטים ליעדים כפולים או משותפים, המערכת נותנת עדיפות לניווט ליעד הקרוב ביותר שמתאים למיקום הנוכחי בתרשים. (Ic89a4, ‏ b/352006850)
  • הוספנו NavType.EnumType חדש לניווט ב-safe args. המשמעות היא שסוגי Enum כבר לא דורשים NavType מותאמים אישית. הערה: השדה SerialName של Enum חייב להיות שם ברירת המחדל המוגדר במלואו. (I66d22, ‏ b/346475493)
  • הוספנו תמיכה מובנית בניווט ב-safe args לסוגים של ארגומנטים nullable,כולל Int?, ‏ Long?, ‏ Float?, ‏ Boolean? ו-Enum<*>?. (I32d13,‏I1c580,‏Ifba66,‏I978b0,‏Ide076 , b/351994237)
  • עכשיו, ה-startDestination של ה-NavGraph ישתמש בערכי ברירת המחדל של הארגומנטים אם המסלול startDestination שהוענק ל-NavGraph שווה בדיוק ל-startDestination.route. (I13762, ‏ b/354046047)

גרסה 2.8.0-beta06

24 ביולי 2024

androidx.navigation:navigation-*:2.8.0-beta06 משוחרר. גרסת 2.8.0-beta06 כוללת את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה שבה בדיקות האיתור של שגיאות בקוד (lint) של WrongStartDestinationType לא בדקו אם יש אובייקטים מסוג Companion בסוג הכיתה שהוענק, וכתוצאה מכך אי אפשר היה לזהות את השגיאה. (I92b09)

גרסה 2.8.0-beta05

10 ביולי 2024

androidx.navigation:navigation-*:2.8.0-beta05 משוחרר. גרסת 2.8.0-beta05 כוללת את ההוספות האלה.

תיקוני באגים

  • תיקון קריסה של ניווט ב-singleTop כש-NavGraphs בתצוגת עץ משתפים את אותו מסלול startDestination. (I17b94, ‏ b/294408596)

גרסה 2.8.0-beta04

26 ביוני 2024

androidx.navigation:navigation-*:2.8.0-beta04 משוחרר. גרסת 2.8.0-beta04 כוללת את ההוספות האלה.

תיקוני באגים

  • עכשיו יש תמיכה בניווט באמצעות מחרוזות ריקות בארגומנטים של נתיב. (Ic5dbd, ‏ b/339481310)
  • שיפור הודעת השגיאה של סריאליזטורים מותאמים אישית שמוצהרים ישירות בשדות הכיתה באמצעות @Serializable(with =...), כדי להבהיר שזו תכונה שאין לה תמיכה כרגע. (I052b0, ‏ b/341319151)
  • עכשיו אפשר להשתמש ב-SavedStateHandleFactory test api בבדיקות שאינן ל-Android, אבל כדי לעשות זאת, Robolectric צריך לתמוך בניתוח ארגומנטים באמצעות Bundles. (I76cdc, ‏ b/340966212)
  • תוקן קריסה שנגרמה כתוצאה משחזור המצב כשממשיכים את האפליקציה אחרי מוות של תהליך באמצעות ניווט בטוח לסוגים ב-Compose. (Ia8f38, ‏ b/341801005)
  • תוקנה בעיה בתכונה 'ניווט בזמן כתיבת אימייל', שבה אחרי ביטול התנועה החזויית לאחור, NavBackStackEntry שאליו המשתמש חוזר אף פעם לא חוזר למצב מחזור החיים RESUMED. כך גם מוודאים שהיעד שחוזרים אליו יחזור בצורה נכונה באנימציה, במקום להישאב למקומו אחרי תנועה מהירה. (I97a0c, ‏ b/346608857)
  • כשמשתמשים בתכונה 'חזרה חזוי' עם 'כתיבה בזמן ניווט', ליעד שיוצג בחלון קופץ תהיה עכשיו רמת z מתאימה, והוא יוצג באנימציה נכונה מעל היעד הנכנס. (I2077b, ‏ b/345993681)

גרסה 2.8.0-beta03

‫12 ביוני 2024

androidx.navigation:navigation-*:2.8.0-beta03 משוחרר. גרסת 2.8.0-beta03 כוללת את ההוספות האלה.

שינויים ב-API

  • ל-CollectionNavType יש שיטה emptyCollection() חדשה וחוסמת. אפשר לשנות את הגדרת ברירת המחדל הזו כדי לטפל באוסף ריק שמוענק כארגומנט. (Ie4d84, ‏ b/341723133)

תיקוני באגים

  • הוספנו מסמך תיעוד לגבי NavType.serializeAsValue ו-serializeAsValues כדי להדגיש שצריך לקודד את הפלט הסופי ב-Uri. (Ida6bd, ‏ b/344943214)
  • תוקנה קריסה שהתרחשה בקריאה ל-toRoute<T> עם ארגומנט CollectionNavType null. כשמנווטים עם CollectionNavType null, ארגומנט הפלט יהיה ערך ברירת המחדל שהוצהר בכיתה Serializable, או ערך ההחזרה של emptyCollection() אם אין ערך ברירת מחדל. (I84158, ‏ Id630f, ‏ b/342672856)

גרסה 2.8.0-beta02

29 במאי 2024

androidx.navigation:navigation-*:2.8.0-beta02 משוחרר. גרסת 2.8.0-beta02 כוללת את ההוספות האלה.

תיקוני באגים

  • תוקן קריסה של ClassCastException במהלך שימוש ב-NavBackStackEntry.toRoute עם NavType מותאם אישית שיכול להיות null. (I1c29b, ‏ b/342239473)
  • תוקנו בעיות בשחזור המצב של סטאק העורפי של הניווט שנגרמו כשמנסים לשחזר רשומה בסטאק העורפי שלא ניתן לגשת אליה באמצעות מזהה מהיעד הנוכחי. מאחר שהנתיבים נתמכים במזהים, גם יעדים שנוצרו באמצעות נתיבים הושפעו מהבעיה. התיקון הזה מתקן גם קריסה שנגרמה על ידי קריאה ל-clearBackStack() עם אותה בעיה בסיסית. (I423c3, ‏ b/339908057)

גרסה 2.8.0-beta01

14 במאי 2024

androidx.navigation:navigation-*:2.8.0-beta01 משוחרר. גרסת 2.8.0-beta01 כוללת את ההוספות האלה.

שינויים ב-API

  • SavedStateHandle.toRoute() מקבל עכשיו פרמטר typeMap לסוגי ארגומנטים מותאמים אישית. (Ie39fb, ‏ b/339026523)
  • הוספנו API לבדיקה ל-navigation-testing כדי ליצור SavedStateHandle מאובייקט Serializable ב-Kotlin. (Id4867, ‏ b/339080702)

תיקוני באגים

  • נוספו מסמכי עזרה לגבי פרמטרים חסרים בפונקציות של Navigation Kotlin DSL. (I26a36)

גרסה 2.8.0-alpha08

1 במאי 2024

androidx.navigation:navigation-*:2.8.0-alpha08 משוחרר. גרסת 2.8.0-alpha08 מכילה את ההוספות האלה.

Safe Args ב-Navigation Compose

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

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

מידע נוסף זמין בפוסט Navigation Compose meet Type Safety.

תכונות חדשות

  • הארטיפקט navigation-fragment-compose מספק עכשיו קומפוזיציה של LocalFragment שמקומית לשיטות הניתנות ליצירה בתוך ComposableFragment. (If35e5)
  • NavType כולל עכשיו תמיכה מובנית ברשימות של Int,‏ String,‏ Boolean,‏ Float ו-Long. (I4b6dd, ‏ Ia914c, ‏ b/188693139)

גרסה 2.8.0-alpha07

17 באפריל 2024

androidx.navigation:navigation-*:2.8.0-alpha07 משוחרר. גרסת 2.8.0-alpha07 מכילה את ההוספות האלה.

תכונות חדשות

  • הוספת פריט navigation-fragment-compose חדש שכולל חלופה של ComposableNavHostFragment ל-NavHostFragment, שמאפשרת להוסיף יעדים מסוג composable לקובצי ה-XML של הניווט. כל יעד composable צריך להיות מפורט כשיטת @Composable ברמה העליונה ללא ארגומנטים, שהשם המלא שלה משמש כמאפיין android:name בכל יעד. כשמנווטים לאחד מהיעדים האלה, נוצר קטע מכיל כדי להציג את התוכן הקומפוזבילי. (I0ef2e, ‏ b/265480755)

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

שינויים ב-API

  • התמיכה ב-Safe Args ב-Navigation Compose באמצעות גישה שמבוססת על Serialization ב-Kotlin נמשכת. ממשקי ה-API האלה עדיין לא הושלמו ומסומנים בהערה ExperimentalSafeArgsApi. ההערה הזו תוסר כשכל ממשק ה-API יושלם בגרסה עתידית. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)

גרסה 2.8.0-alpha06

3 באפריל 2024

androidx.navigation:navigation-*:2.8.0-alpha06 משוחרר. גרסת 2.8.0-alpha06 כוללת את ההוספות האלה.

שינויים ב-API

תיקוני באגים

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

גרסה 2.8.0-alpha05

‫20 במרץ 2024

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

תכונות חדשות

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

שינויים ב-API

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

תיקוני באגים

  • פרמטרים של שאילתות בקישורי עומק מאפשרים עכשיו להשתמש בערכים בצורת סוגריים מסולסלים סביב שם הארגומנט (כלומר {argName}) כערכים תקינים ל-NavTypes שמבוסס על מחרוזת. כך מתקנים בעיה שבה ערך כזה נחשב לא חוקי (או ללא ערך) לכל הסוגים. (I18302, ‏ b/327274038)
  • פונקציות NavController שתומכות במסלולים כמו navigate או popBackStack יכולות עכשיו להתאים כראוי למסלולים שממולאים בארגומנטים של מערך NavTypes. (Iea805, ‏ b/327229511)

גרסה 2.8.0-alpha04

6 במרץ 2024

androidx.navigation:navigation-*:2.8.0-alpha04 משוחרר. גרסת 2.8.0-alpha04 מכילה את ההוספות האלה.

תכונות חדשות

  • עכשיו אפשר לציין את SizeTranform למעברים ב-Navigation Compose על ידי הגדרה שלהם כחלק מההפעלה של הפונקציות composable ו/או navigation. (I91062, b/296912651)

תיקוני באגים

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

גרסה 2.8.0-alpha03

21 בפברואר 2024

androidx.navigation:navigation-*:2.8.0-alpha03 משוחרר. גרסה 2.8.0-alpha03 מכילה את ההצהרות האלה.

שינויים ב-API

  • NavBackStackEntry.savedStateHandle מסומן עכשיו כ-@MainThread כי הוא משתמש בקוד שצריך להיות בכל מקרה בשרשור הראשי. (Ibb988, ‏ b/299523245)

תיקוני באגים

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

עדכון יחסי תלות

גרסה 2.8.0-alpha02

7 בפברואר 2024

androidx.navigation:navigation-*:2.8.0-alpha02 משוחרר. גרסה 2.8.0-alpha02 מכילה את ההצהרות האלה.

תכונות חדשות

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

גרסה 2.8.0-alpha01

24 בינואר 2024

androidx.navigation:navigation-*:2.8.0-alpha01 משוחרר. גרסה 2.8.0-alpha01 כוללת את ההצהרות האלה.

תיקוני באגים

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

עדכון יחסי תלות

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

תרומה חיצונית

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

גרסה 2.7.7

גרסה 2.7.7

7 בפברואר 2024

androidx.navigation:navigation-*:2.7.7 משוחרר. גרסה 2.7.7 כוללת את השמירות האלה.

תיקוני באגים

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

תרומה חיצונית

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

גרסה 2.7.6

גרסה 2.7.6

13 בדצמבר 2023

androidx.navigation:navigation-*:2.7.6 משוחרר. גרסה 2.7.6 מכילה את ההצהרות האלה.

תיקוני באגים

  • הפונקציה NavGraph equals() מביאה עכשיו בחשבון בצורה נכונה את הצמתים של התרשים השני, במקום רק את התרשים שממנו היא נקראת. כך תוכלו לוודא שגרפים עם צמתים עם מזהים שונים לא ייחשבו יותר כזהים (I401cb, ‏ b/311414915)

גרסה 2.7.5

גרסה 2.7.5

1 בנובמבר 2023

androidx.navigation:navigation-*:2.7.5 משוחרר. גרסה 2.7.5 כוללת את השינויים האלה.

שיפורי ביצועים

  • שיפור משמעותי בביצועים (גם מבחינת זמן וגם מבחינת מספר ההקצאות) של השוואה בין שני תרשימים. המשמעות היא שקריאות כמו setGraph, שמבצעות באופן פנימי השוואה בין התרשים החדש לבין התרשים הקיים, מהירות הרבה יותר וכתוצאה מכך יש פחות פריימים מושמטים. תודה ל-Michał Z על הניתוח המקיף שהוביל לשיפור הזה. (I6ad62)
  • NavHost ייצור עכשיו את יעד ההתחלה במעבר הראשון של ה-composition, במקום להמתין למעבר השני כדי לקרוא את המצב המעודכן. (I439a7, ‏ b/304852206)

תיקוני באגים

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

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

  • הניווט באמצעות קטעי קוד (Fragments) תלוי עכשיו ב-Fragment 1.6.2, ותוקנה בעיה שבה המופעים ViewModel של קטעי קוד בתצוגת עץ לא נמחקו כשקוראים ל-clearBackStack.

גרסה 2.7.4

גרסה 2.7.4

4 באוקטובר 2023

androidx.navigation:navigation-*:2.7.4 משוחרר. גרסה 2.7.4 כוללת את השינויים הבאים.

תכונות חדשות

  • הוספנו תמיכה ב-popUpTo לשימוש במסלולים עם ארגומנטים, כדי לאפשר חזרה לכניסה ספציפית שמשתמשת באותם ארגומנטים בדיוק, בהתאם לתמיכה שקיימת ב-popBackStack. (I731f4, ‏ b/299255572)

תיקוני באגים

  • תוקנה בעיה שבה הפרעה לניווט באמצעות ניווט אחר באמצעות popUpTo גורמת לקריסה של FragmentNavigator. (I3c848, ‏ b/301887045)
  • תוקנה בעיה שבה לחיצה על לחצן החזרה לאחור במערכת גרמה לכך שה-currentDestination לא יתעדכן בצורה נכונה בהתאם ל-Fragment המוצג. (Id0d6c, ‏ b/289877514)
  • מחזור החיים של DialogFragment יעבור עכשיו כראוי למצב RESUMED כשתיבת הדו-שיח שמעליו תיסגר. (I88f0d, ‏ b/301811387)

גרסה 2.7.3

גרסה 2.7.3

20 בספטמבר 2023

androidx.navigation:navigation-*:2.7.3 משוחרר. גרסה 2.7.3 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה בניווט באמצעות קטעים שגרמה לכך שרשימה visibleEntries מכילה רשומות שגויות. (I5caa9, b/288520638)
  • תוקנה בעיה שגרמה לכך שהיעד 'חלון צף' (כלומר, Dialogs, ‏ Bottomsheets וכו') אף פעם לא מקבל קריאה חוזרת ל-Lifecycle של RESUMED. (I3b866, ‏ b/287505132)

גרסה 2.7.2

גרסה 2.7.2

6 בספטמבר 2023

androidx.navigation:navigation-*:2.7.2 משוחרר. גרסה 2.7.2 כוללת את השינויים הבאים.

תיקוני באגים

  • הניווט תלוי עכשיו ב-Lifecycle 2.6.2, וכך מתוקן אינטראקציה בין rememberSaveable לבין NavHost של Navigation Compose, שגורמת לכך שלא ניתן יהיה לשחזר כראוי את המצב של rememberSaveable של יעדים ואת כל המופעים של SavedStateHandle בבעלות ViewModel אחרי מותו של התהליך ויצירתו מחדש. (b/298059596, ‏ b/289436035)
  • תוקנה בעיה שבה מוצגות בו-זמנית כמה תיבות דו-שיח בחלונית הניווט לכתיבה, כאשר תיבות הדו-שיח שהן מוסתרות חלקית (למשל, לא תיבת הדו-שיח העליונה) נמצאות בסטטוס CREATED של מחזור חיים במקום בסטטוס STARTED. (aosp/2728520, ‏ b/289257213)
  • תוקנה בעיה שבה מוצגות בו-זמנית כמה תיבות דו-שיח ב'ניווט לכתיבה', וכאשר סוגרים את תיבת הדו-שיח העליונה, תיבת הדו-שיח העליונה החדשה נתקעת במצב STARTED במחזור החיים במקום לעבור כראוי ל-RESUMED. (aosp/2629401, ‏ b/286371387)
  • Navigation Safe Args כבר לא יוצר את המשימות שלו באופן מיידי אם הן לא מבוצעות בפועל. (I0e385, ‏ b/260322841)

עדכון יחסי תלות

  • התכונה 'כתיבה מהירה' לניווט תלויה עכשיו ב-Compose 1.5.1.

גרסה 2.7.1

גרסה 2.7.1

23 באוגוסט 2023

androidx.navigation:navigation-*:2.7.1 משוחרר. גרסה 2.7.1 כוללת את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה בניווט באמצעות Compose, שבה כשמשתמשים ב-Scaffold, יכול להיות שתופיע הודעת שגיאה על ניסיון לגשת ל-Lifecycle.State.DESTROYED ViewModel. (I1dc11, ‏ b/268422136)

גרסה

גרסה

9 באוגוסט 2023

androidx.navigation:navigation-*:2.7.0 משוחרר. גרסה 2.7.0 כוללת את ההצהרות האלה.

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

אנימציות מ-Accompanist

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

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

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

תיקוני באגים

  • NavHost בתכונה 'כתיבה בזמן ניווט' עכשיו מיירט כראוי קריאות חזרה למערכת גם אחרי שהפעילות הופסקה והמשיכה. (Icb6de, ‏ b/279118447)

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

  • הניווט תלוי עכשיו בסמל הכתיבה 1.5.0 למעלה מ-1.1.0.

גרסה 2.7.0-rc01

26 ביולי 2023

androidx.navigation:navigation-*:2.7.0-rc01 משוחרר. גרסה 2.7.0-rc01 כוללת את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שבה פונקציות הלוגריתם הרגילות (lambda) EnterTransition ו-ExitTransition שנוצרו כחלק מ-NavHost עלולות להישאר בזיכרון גם אחרי שה-NavHost יוסר מההרכב. (I893d0)

בעיות מוכרות

  • יש בעיה בגרסה 2.6.x של Navigation, שבה ניווט באמצעות popUpTo עלול לגרום ל-IllegalArgumentException. יכול להיות שאפשר למנוע את החריג הזה על ידי שינוי המבנה של התרשים, בדומה לטיפים שמוצגים כאן. (b/287133013)

גרסה 2.7.0-beta02

28 ביוני 2023

androidx.navigation:navigation-*:2.7.0-beta02 משוחרר. גרסה 2.7.0-beta02 כוללת את ההתחייבויות האלה.

תיקוני באגים

  • ל-Navigation Compose יש עכשיו סדר z מתאים למעברים מותאמים אישית שמשתמשים באפשרות 'ניווט' עם popUpTo.‏ (/Ib1c3a, ‏ b/285153947)

גרסה 2.7.0-beta01

7 ביוני 2023

androidx.navigation:navigation-*:2.7.0-beta01 משוחרר. גרסה 2.7.0-beta01 כוללת את ההצהרות האלה.

תיקוני באגים

  • NavHost בתפריט הניווט 'כתיבה' עכשיו מאפשרת ליירט כראוי שיחות חזרה מהמערכת, גם אחרי שActivity STOPPED וRESUMED. (Icb6de, ‏ b/279118447)

גרסה 2.7.0-alpha01

24 במאי 2023

androidx.navigation:navigation-*:2.7.0-alpha01 משוחרר. גרסה 2.7.0-alpha01 כוללת את ההצהרות האלה.

אנימציות מ-Accompanist

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

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

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

תיקוני באגים

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

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

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

גרסה 2.6.0

גרסה 2.6.0

7 ביוני 2023

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

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

  • עכשיו, arguments של NavBackStackEntry ו-arguments שהועברו ל-OnDestinationChangedListener הם רק עותק של הארגומנטים הבלתי משתנים שנוצרו כשנווטתם ליעד. המשמעות היא ששינויים שתבצעו בחבילות האלה לא ישתקפו בגישה הבאה ל-arguments או למכונות OnDestinationChangedListener אחרות.
  • עכשיו יש ב-NavDeepLink תמיכה בערכי ברירת מחדל למערכים, שמאפשרת תמיכה בפרמטרים חוזרים של שאילתות שימופו לסוג המערך של הארגומנט. NavType כולל עכשיו גם שיטת ברירת מחדל שאפשר לשנות כדי לשלב שני ערכים שעברו ניתוח.
  • מעכשיו, תתי-כיתות בהתאמה אישית של NavType יכולות לשנות את serializeAsValue כדי לסריאליזציה ערך למחרוזת, וכך לאפשר את האנקפסולציה המלאה של הסריאליזציה וההמרה מהסריאליזציה (דרך parseValue) בכיתה NavType. StringType משנה עכשיו את השיטה הזו כדי לקרוא ל-Uri.encode ב-String הנתון.

שינויים חשובים ב-Navigation Compose מגרסה 2.5.0

  • כשמציגים תצוגה מקדימה של רכיב מורכב באמצעות NavHost, עכשיו מוצג כברירת מחדל startDestination של NavGraph.
  • עכשיו אפשר להשתמש ב-NavController.popBackStack(route), ב-NavController.getBackStackEntry(route) וב-NavController.clearBackStack(route) כדי לשלוח מסלולים עם ארגומנטים שממולאים חלקית או במלואם. חשוב לזכור שהארגומנטים צריכים להתאים בדיוק לארגומנטים של הרשומה.
  • ניסיון ליצור NavDeepLink ריק באמצעות navDeepLink Kotlin DSL יוביל עכשיו לאזהרת איתור שגיאות בקוד (lint) שמציינת שלקישור עומק צריכים להיות uri, פעולה ו/או mimetype כדי שהוא יהיה תקף.

שינויים חשובים בניווט באמצעות קטעי קוד מאז גרסה 2.5.0

  • NavHostFragment כבר לא מיירט את לחצן החזרה אחורה במערכת עצמו. כך FragmentManager הבסיסי יכול לטפל בלחצן החזרה למערכת. כך, Fragment 1.7.0-alpha01 ומעלה יכול לספק אנימציית חזרה חזויה בתוך האפליקציה במכשירי Android U.
  • כשמשתמשים בניווט עם קטעי קוד, ניסיון לבצע FragmentTransaction באופן ידני שמוסיף קטע קוד ל-back stack של FragmentManager יגרום להפעלת IllegalArgumentException. תמיד צריך להוסיף מקטעים דרך ה-API של navigate().
  • כשמשתמשים במחרוזת המדויקת ${applicationId} כתובת Placeholder במאפיינים app:data ו-app:dataPattern ברכיב הפעילות בקובץ XML של הניווט, packageName של ההקשר יאוכלס באופן אוטומטי ב-Placeholder במהלך ההנפה.
  • FragmentNavigator משתמש עכשיו בממשקי ה-API של המעבר במהלך הניווט וההצגה של NavBackStackEntries. המשמעות היא שה-NavBackStackEntry Lifecycle יחכה עכשיו עד שהאפקטים המיוחדים של החלק שנכנס והחלק שיוצא יסתיימו, לפני שהוא יעביר את ה-Lifecycle.State הסופי.
  • DialogFragmentNavigator משתמש עכשיו בממשקי ה-API של המעבר במהלך הניווט וההצגה של NavBackStackEntries. פירוש הדבר הוא ש-NavBackStackEntry Lifecycle ימתין עכשיו עד ש-DialogFragment Lifecycle יעברו ל-DESTROYED, ואז יעברו בעצמם ל-DESTROYED.
  • עכשיו אפשר לאחזר את NavController דרך NavHostFragment ברגע שה-NavHostFragment מצורף ל-FragmentManager, ולא רק אחרי onCreate().
  • התמיכה של התכונה 'ניווט' במודולים של פיצ'רים דינמיים תלויה עכשיו בספרייה המפורטת של Play Feature Delivery.
  • Navigation Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.3.0. המשמעות היא שהיא תואמת עכשיו רק לגרסאות 7.3.0 ואילך.

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

  • כשמעבירים את המזהה של תרשים ניווט אל AppBarConfiguration (למשל דרך Menu), NavigationUI מתייחס עכשיו ליעד ההתחלה של תרשים הניווט הזה כאל יעד ברמה העליונה בלבד, במקום לסמן בטעות כל יעד בתרשים כיעד ברמה העליונה. ההתנהגות של העברת המזהה של יעד ספציפי לא השתנתה. אותה פונקציונליות זמינה לקוד שלכם באמצעות הפונקציה החדשה isTopLevelDestination ב-AppBarConfiguration.
  • השילובים של setupWithNavController ב-NavigationUI לעבודה עם שורת האפליקציה העליונה ינתחו עכשיו את הערכים של R.string עבור ארגומנטים של ReferenceType שנמצאים ב-android:label לערכי המחרוזת שלהם, במקום להפיק את המספר המלא של המשאב שנוצר באופן אוטומטי.
  • NavigationUI מספק עכשיו יומנים כשהוא לא מצליח לנווט דרך MenuItem שנבחר.

גרסה 2.6.0-rc02

24 במאי 2023

androidx.navigation:navigation-*:2.6.0-rc02 משוחרר. גרסה 2.6.0-rc02 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה בניווט ב-Fragments, שבה ניווט באמצעות popUpTo והוצאה של fragment מסטאק העורפי בלי ליצור מחדש את התצוגה שלו גרמו לכך שהחזרה למערכת הפסיקה לפעול. (Ieb8d4, ‏ b/281726455)

גרסה 2.6.0-rc01

10 במאי 2023

androidx.navigation:navigation-*:2.6.0-rc01 משוחרר. גרסה 2.6.0-rc01 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה בניווט עם קטעי קוד, שבה הסרת קטע קוד באמצעות navigate עם popUpTo בקריאה החוזרת ל-lifecycle‏ 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)

תיקוני באגים

  • כשמשתמשים בניווט עם קטעי קוד, ניסיון לבצע FragmentTransaction באופן ידני שמוסיף קטע קוד ל-back stack של FragmentManager יגרום להפעלת IllegalArgumentException. תמיד צריך להוסיף מקטעים דרך ה-API של navigate(). (I6d38e)
  • כשיש navigate שמוסיף רשומה ו-popBackStack שמסיר אותה באותה מסגרת, הרשומה העליונה בתוצאה בסטאק האחורי תגיע עכשיו באופן עקבי אל RESUMED Lifecycle.State. (Id8067, ‏ b/276495952)

גרסה 2.6.0-alpha09

5 באפריל 2023

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

תיקוני באגים

  • תיקנו את הבדיקות למסלול לא תקין, כך שאם NavDestination מכיל NavArgument שאינו nullable, המסלול של היעד הזה חייב להכיל placeholders ל-args ששמותיהם זהים לשם של NavArgument שאינו nullable. (Ic62bf, b/274697949)
  • ניווטים לקישור עומק שמבוססים על Action/MimeType ייכשל עכשיו אם בפעולה הניווט חסרה NavArgument שאינה ניתנת לאפס, שנדרשת על ידי NavDestination ש-Action/MimeType תואם אליו. (Ibfa17, ‏ b/271777424)
  • כש-NavController מגדיר גרף עם אותו מסלול ויעדים כמו בגרף הקודם, הוא מחליף עכשיו בצורה תקינה את צמתים הגרף הנוכחיים ואת היעדים בסטאק העורפי במופעים חדשים. התיקון הזה מטפל בקריסה שמתרחשת כשמשתמשים ב-onLaunchSingleTop בלי לשמור את המצב ב'כתיבה בזמן ניווט'. התיקון הזה גם מתקן שגיאה שבה מנווטים ליעדי build שמשויכים לגרף הבסיס, וכן סטאק לא תקין של חזרה אחורה. (I5bc58, ‏ b/275258161, ‏ b/275407804)

גרסה 2.6.0-alpha08

22 במרץ 2023

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

תכונות חדשות

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

תיקוני באגים

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

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

גרסה 2.6.0-alpha07

8 במרץ 2023

androidx.navigation:navigation-*:2.6.0-alpha07 משוחרר. גרסה 2.6.0-alpha07 מכילה את ההצהרות האלה.

תיקוני באגים

  • הוספנו ל-API של getBackStackEntry,‏ popBackStack ו-clearBackStack, שמקבל מסלולים, תמיכה בתבניות של מסלולים עם ארגומנטים שאפשר להגדיר כ-null ועם פרמטרים של שאילתות שאפשר להגדיר כ-null (I22294,‏ b/269302500)
  • תוקנה בעיה שבה קריאה ל-clearBackStack() מ-NavController לא מנקה את המצב השמור במנהל הקטעים המשויך למחסנית העורפי שהושמטה. (Ic1cce, ‏ b/271190202)
  • תוקנה נסיגה בגרסה 2.6.0-alpha06 שגרמה להדגשה של MenuItem הלא נכון ב-BottomNavigationView כשמשתמשים ב'חזרה למערכת' בין כרטיסיות. (I634f6, ‏ b/270447657)
  • תוקנה נסיגה בגרסה 2.6.0-alpha06 שגרמה לכך ש-NavBackStackEntry לא הועברו לסטטוס 'המשך' כשנעשה שימוש ב-Animation. (Ib3589, ‏ b/269646882)

גרסה 2.6.0-alpha06

22 בפברואר 2023

androidx.navigation:navigation-*:2.6.0-alpha06 משוחרר. גרסה 2.6.0-alpha06 מכילה את ההצהרות האלה.

תכונות חדשות

  • כשמציגים תצוגה מקדימה של רכיב מורכב באמצעות NavHost, עכשיו מוצג כברירת מחדל startDestination של NavGraph. (I2b89f)

שינויים ב-API

  • כל עומסי יתר של NavController navigate מסומנים עכשיו ב-@MainThread כדי להבטיח שהם יישלחו בקריאה לשרשור הראשי. (I2c0b0, ‏ b/263427111)

תיקוני באגים

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

בעיות מוכרות

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

גרסה 2.6.0-alpha05

8 בפברואר 2023

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

תכונות חדשות

  • עכשיו אפשר להשתמש ב-NavController.popBackStack(route), ב-NavController.getBackStackEntry(route) וב-NavController.clearBackStack(route) כדי לשלוח מסלולים עם ארגומנטים שממולאים חלקית או במלואם. חשוב לזכור שהארגומנטים צריכים להתאים בדיוק לארגומנטים של הרשומה. (Iebd28, ‏ Ic678c, ‏ I3b37b, ‏ b/257514373)
  • FragmentNavigator משתמש עכשיו בממשקי ה-API של המעבר במהלך הניווט וההצגה של NavBackStackEntries. המשמעות היא שה-NavBackStackEntry Lifecycle יחכה עכשיו עד שהאפקטים המיוחדים של החלק שנכנס והחלק שיוצא יסתיימו, לפני שהוא יעביר את ה-Lifecycle.State הסופי. (I3cb19, ‏ b/238686802)
  • DialogFragmentNavigator משתמש עכשיו בממשקי ה-API של המעבר במהלך הניווט וההצגה של NavBackStackEntries. פירוש הדבר הוא ש-NavBackStackEntry Lifecycle ימתין עכשיו עד ש-DialogFragment Lifecycle יעברו ל-DESTROYED, ואז יעברו בעצמם ל-DESTROYED. (I53ee5, ‏ b/261213893)

שינויים ב-API

  • NavigatorState מספק עכשיו את ה-API של prepareForTransition כדי לאפשר ל-Navigator להעביר NavBackStackEntries ל-Lifecycle.State ביניים. (I42c21, ‏ b/238686802)
  • עכשיו אפשר לגשת למחסנית הקוד הקודמת שמשויכת ל-NavGraphNavigator או ל-ComposeNavigator דרך נכס backstack. ComposeNavigator חושף עכשיו גם את פונקציית ה-callback 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)
  • Navigation SafeArgs לא יגרום יותר לשגיאת הידור כשמשתמשים בארגומנטים באורך 19 תווים בדיוק. (Id60bc, ‏ b/257110095)

גרסה 2.6.0-alpha04

9 בנובמבר 2022

androidx.navigation:navigation-*:2.6.0-alpha04 משוחרר. גרסה 2.6.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

  • מעכשיו, תתי-כיתות בהתאמה אישית של NavType יכולות לשנות את serializeAsValue כדי לסריאליזציה ערך למחרוזת, וכך לאפשר את האנקפסולציה המלאה של הסריאליזציה וההמרה מהסריאליזציה (דרך parseValue) בכיתה NavType. StringType משנה עכשיו את השיטה הזו כדי לקרוא ל-Uri.encode ב-String הנתון. (Ie5213, ‏ b/247637434)
  • NavigationUI מספק עכשיו יומנים כשהוא לא מצליח לנווט דרך MenuItem שנבחר. (I2af5a, b/247730357)

תיקוני באגים

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

עדכון יחסי תלות

  • התמיכה של התכונה 'ניווט' במודולים של פיצ'רים דינמיים תלויה עכשיו בספרייה המפורטת של Play Feature Delivery. (Ib4ddc)
  • Navigation Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.3.0. המשמעות היא שהיא תואמת עכשיו רק לגרסאות 7.3.0 ואילך. (I47e49)

גרסה 2.6.0-alpha03

24 באוקטובר 2022

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

תיקוני באגים

  • מניווט 2.5.3: NavHost לא יגרום יותר לNoSuchElementException כשאין יעד זמין לCrossfade לכתוב. עכשיו הוא פשוט ידלג על היצירה. (Ieb46e, ‏ b/253299416)
  • מניווט 2.5.3: תוקנה בעיה שבה המצב השמור של Compose (למשל, שימושים ב-rememberSaveable) לא נשכח והוסר כשיעד הוסר מהמקבץ האחורי. (I64949)

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

גרסה 2.6.0-alpha02

5 באוקטובר 2022

androidx.navigation:navigation-*:2.6.0-alpha02 משוחרר. גרסה 2.6.0-alpha02 מכילה את ההצהרות האלה.

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

  • כשמעבירים את המזהה של תרשים ניווט אל AppBarConfiguration (למשל דרך Menu), NavigationUI מתייחס עכשיו ליעד ההתחלה של תרשים הניווט הזה כאל יעד ברמה העליונה בלבד, במקום לסמן בטעות כל יעד בתרשים כיעד ברמה העליונה. ההתנהגות של העברת המזהה של יעד ספציפי לא השתנתה. אותה פונקציונליות זמינה לקוד שלכם באמצעות הפונקציה החדשה isTopLevelDestination ב-AppBarConfiguration. (Ie936e, ‏ b/238496771)

תיקוני באגים

  • הרכיב navigation:navigation-fragment תלוי עכשיו בגרסה 1.5.2 של ה-Fragment. (I00ba4)
  • פריט התפריט שנבחר לא יתעדכן יותר כשמנווטים ליעד FloatingWindow, כמו תיבת דו-שיח. (I4cde8, ‏ b/240308330)

גרסה 2.6.0-alpha01

7 בספטמבר 2022

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

תכונות חדשות

  • השילובים של setupWithNavController ב-NavigationUI לעבודה עם שורת האפליקציה העליונה ינתחו עכשיו את הערכים של R.string עבור ארגומנטים של ReferenceType שנמצאים ב-android:label לערכי המחרוזת שלהם, במקום להפיק את המספר המלא של המשאב שנוצר באופן אוטומטי. (I5f803, ‏ b/167959935)
  • עכשיו יש ב-NavDeepLink תמיכה בערכי ברירת מחדל למערכים, שמאפשרת תמיכה בפרמטרים חוזרים של שאילתות שימופו לסוג המערך של הארגומנט. NavType כולל עכשיו גם שיטת ברירת מחדל שאפשר לשנות כדי לשלב שני ערכים שעברו ניתוח. (Id68c3, ‏ b/209977108)
  • כשמשתמשים במחרוזת המדויקת ${applicationId} כתובת Placeholder במאפיינים app:data ו-app:dataPattern ברכיב הפעילות בקובץ XML של הניווט, packageName של ההקשר יאוכלס באופן אוטומטי ב-Placeholder במהלך ההנפה. (Iaabde, ‏ b/234223561)
  • ניסיון ליצור NavDeepLink ריק באמצעות navDeepLink Kotlin DSL יוביל עכשיו לאזהרת איתור שגיאות בקוד (lint) שמציינת שלקישור עומק צריכים להיות uri, פעולה ו/או mimetype כדי שהוא יהיה תקף. (I08d2f, ‏ b/154038883)

שינויים ב-API

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

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

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

תיקוני באגים

  • מניווט 2.5.2: ניווט דינמי מנסה עכשיו להתקין כראוי יעדים של פעילויות מממשקים אחרים לפני שמנווטים אליהם. (Ia2c16, ‏ b/240292838)
  • מניווט 2.5.2: מערכת הניווט תחליף עכשיו כראוי את מופע הפלח כשמנווטים לאותו יעד ומגדירים את הדגל launchSingleTop כ-true. (I5a2f1, ‏ b/237374580)
  • מניווט 2.5.2: תוקן הבעיה IllegalStateException שנגרמה כתוצאה מהניווט לתרשים עם עץ כפול שמשתף הורה עם יעד חדש שנפתח. (I9f7cb, ‏ b/243778589)

גרסה 2.5

גרסה 2.5.3

24 באוקטובר 2022

androidx.navigation:navigation-*:2.5.3 משוחרר. גרסה 2.5.3 מכילה את השמירות האלה.

תיקוני באגים

  • NavHost לא יגרום יותר ל-NoSuchElementException כשאין יעד זמין ל-Crossfade לכתיבה. עכשיו הוא פשוט ידלג על היצירה. (Ieb46e, ‏ b/253299416)
  • תוקנה בעיה שבה מצב כתיבה שנשמר (למשל, שימושים ב-rememberSaveable) לא נמחק והוסר כשיעד הוסר מהמקבץ האחורי. (I64949)

גרסה 2.5.2

7 בספטמבר 2022

androidx.navigation:navigation-*:2.5.2 משוחרר. גרסה 2.5.2 כוללת את ההוספות האלה.

תיקוני באגים

  • התכונה 'ניווט דינמי' מנסה עכשיו להתקין כראוי יעדים של פעילויות ממודולים אחרים לפני שהיא מנווטת אליהם. (Ia2c16, ‏ b/240292838)
  • עכשיו, מערכת הניווט תחליף כראוי את מופע ה-Fragment כשמנווטים לאותו יעד ומגדירים את הדגל launchSingleTop לערך true. (I5a2f1, ‏ b/237374580)
  • תוקנה השגיאה IllegalStateException שנגרמה כתוצאה מניווט לתרשים עם עץ כפול שמשתף הורה עם יעד חדש שנפתח. (I9f7cb, ‏ b/243778589)

עדכון יחסי תלות

גרסה 2.5.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 – עכשיו יש ל-Navigation אפשרות לספק ViewModelProvider.Factory ללא מצב (stateless) דרך CreationExtras של 2.5.0 לניהול מחזור חיים.

Navigation SafeArgs

  • Navigation Safe Args שדרג את התלות של Android Gradle Plugin כך שתסתמך על 7.0.4, והפסיק את התאימות לגרסאות AGP שקדמו ל-7.0.
  • נוספה תמיכה במאפיין build.gradle של מרחב השמות, לשימוש במקום applicationId.

שינויים אחרים

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

גרסה 2.5.0-rc02

15 ביוני 2022

androidx.navigation:navigation-*:2.5.0-rc02 משוחרר. גרסה 2.5.0-rc02 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקן קריסה שנגרמה בגלל מעבר מהיר בין יעדים בתחתית המסך כשמשתמשים בסמל הכתיבה NavHost בתפריט הניווט. (I3979a, ‏ b/234054916)
  • Navigation SafeArgs לא יתרסק יותר כשמשתמשים ב-applicationIdSuffix ובמרחב שמות בלי applicationId, או כשה-applicationId והמרחב השמות שונים. (I754b1, ‏ b/233119646)
  • ל-NavArgument יש עכשיו פונקציית toString() בהתאמה אישית כדי להציג את הערכים הפנימיים של הארגומנט. (I900a8)

גרסה 2.5.0-rc01

11 במאי 2022

androidx.navigation:navigation-*:2.5.0-rc01 משוחרר. גרסה 2.5.0-rc01 כוללת את ההוספות האלה.

תכונות חדשות

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

תיקוני באגים

  • היקפי ה-Composable ב-NavHost וב-DialogHost נהרסים עכשיו בסדר הצפוי, כלומר ה-Composable הפנימיים נהרסים לפני ה-Composable החיצוניים. (I157e6)
  • עכשיו, ב-Navigation SafeArgs נעשה שימוש ב-PathSensitivity.RELATIVE ב-ArgumentsGenerationTask כדי לאפשר העברה של מטמון. המשמעות היא שאפשר להשתמש שוב ברשומה במטמון מ-build ב-CI ל-build מקומי. (I5f67c, ‏ b/173420454)
  • כלל האיתור של שגיאות בקוד (lint) UnrememberedGetBackStackEntryDetector עודכן כדי לוודא שהקריאה ל-remember שמקיפה את הקריאה ל-getBackStackEntry() מעבירה גם אובייקט NavBackStackEntry כמפתח.(Ib7081, ‏ b/227382831)

גרסה 2.5.0-beta01

20 באפריל 2022

androidx.navigation:navigation-*:2.5.0-beta01 משוחרר. גרסה 2.5.0-beta01 כוללת את ההצהרות האלה.

תיקוני באגים

  • DialogNavigator משתמש עכשיו ב-popWithTransition כשמפעיל קריאה ל-dismiss(). התיקון הזה מתקן מצב מרוץ (race condition) כשמשתמשים ב-ViewModel בתוך יעד dialog, שגורם ל-IllegalStateException כשסוגרים את תיבת הדו-שיח באמצעות לחצן החזרה למערכת או בהקשה מחוץ לתיבת הדו-שיח כדי לצאת. (Id7376, ‏ b/226552301)

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

  • הניווט תלוי עכשיו במחזור חיים 2.5.0-beta01, ותיקון IllegalStateException כשמקפלים NavHost אחד בתוך NavHost אחר בכרטיסיית ניווט תחתונה לא ראשית כשמשתמשים בכמה סטאקים של חזרה אחורה.

גרסה 2.5.0-alpha04

6 באפריל 2022

androidx.navigation:navigation-*:2.5.0-alpha04 משוחרר. גרסה 2.5.0-alpha04 כוללת את ההצהרות האלה.

שינויים ב-API

תיקוני באגים

  • עכשיו, NavHost תלוי ב-visibleEntries מה-NavController כדי לקבוע אילו רשומות לכתוב. כלומר, כשמשתמשים ב-NavHost בתצוגת עץ, ה-NavHost הפנימי אמור להיעלם עכשיו בצורה נכונה. (I4ba2b, ‏ b/225394514)
  • השדה visibleEntries StateFlow ש-NavController מספק מבוסס עכשיו על מצב מחזור החיים המקסימלי של הרשומה, במקום על מצב מחזור החיים הנוכחי. המשמעות היא שגם אם מחזור החיים של המארח של navController יהיה נמוך מ-STARTED, רשימת הרשומות הגלויה לא תשתנה. (I9e2a8, ‏ b/225394514)
  • עכשיו יש ב-SavedStateViewFactory תמיכה בשימוש ב-CreationExtras גם אם הוא הותחל באמצעות SavedStateRegistryOwner. אם מציינים פרמטרים נוספים, המערכת מתעלמת מהארגומנטים שהועברו ל-init. (I6c43b, b/224844583)
  • עכשיו אפשר לנתח את NavDeepLink עם פרמטר שאילתה אחד ללא ערך. (I0efe8, ‏ b/148905489)
  • מחרוזות ריקות נחשבות עכשיו כארגומנטים תקינים בקישורי עומק. (I70a0d, ‏ b/217399862)
  • Navigation Safe Args לא יתקרוס יותר כשמשתמשים במרחבי שמות ואין AndroidManifest.xml. (I17ccf, ‏ b/227229815)

גרסה 2.5.0-alpha03

23 בפברואר 2022

androidx.navigation:navigation-*:2.5.0-alpha03 משוחרר. גרסה 2.5.0-alpha03 כוללת את ההצהרות האלה.

שינויים ב-API

  • עכשיו אפשר להעביר את CreationExtras אל by navGraphViewModels כדי ליצור ViewModel. (I29217, ‏ b/217618359)

תיקוני באגים

  • NavDeepLinks תומך עכשיו בצורה תקינה בתווים מקודדים של שורות חדשות שמוטמעים במסלולים או ב-URI של קישורי עומק. (I513d1, ‏ b/217815060)
  • CreationExtras יפעל עכשיו בצורה תקינה כשמשתמשים בו עם NavBackStackEntries כדי ליצור ViewModels. (I69161, ‏ b/217617710)
  • מעכשיו, ב-Navigation Safe Args אפשר להשתמש במרחב השמות שמוגדר ב-build.gradle במקום בחבילה ב-AndroidManifest. (I659ef, ‏ b/217414933)

גרסה 2.5.0-alpha02

9 בפברואר 2022

androidx.navigation:navigation-*:2.5.0-alpha02 משוחרר. גרסה 2.5.0-alpha02 כוללת את ההוספות האלה.

תיקוני באגים

  • מNavigation 2.4.1: עכשיו ה-NavHostFragment מגדיר את ה-OnBackPressedDispatcher בצורה נכונה כשמשתמשים ב-viewbinding עם תרשימים בתצוגת עץ. (Ifbb51, ‏ b/214577959)
  • מניווט 2.4.1: כשמקשרים לעומק דרך כמה רכיבי NavGraph בתצוגת עץ, עכשיו סטאק החזרה יכלול כראוי יעדים ביניים של התחלה. (I504c0, ‏ b/214383060)

גרסה 2.5.0-alpha01

26 בינואר 2022

androidx.navigation:navigation-*:2.5.0-alpha01 משוחרר. גרסה 2.5.0-alpha01 מכילה את ההצהרות האלה.

תכונות חדשות

תיקוני באגים

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

Safe Args

  • Safe Args תלוי עכשיו בפלאגין Android Gradle בגרסה 7.0.4. המשמעות היא ש-Navigation Safe Args לא יהיה תואם יותר לגרסאות Android Studio שקודמות לגרסה 7.0, אבל הוא תואם עכשיו ל-Android Gradle Plugin מגרסה 7.1.0 ואילך. (I41c88, ‏ b/213086135, ‏ b/207670704)

גרסה 2.4.2

גרסה 2.4.2

6 באפריל 2022

androidx.navigation:navigation-*:2.4.2 משוחרר. גרסה 2.4.2 כוללת את ההצהרות האלה.

תיקוני באגים

  • הוספה לאחור מ-Navigation 2.5.0-alpha03: NavDeepLinks תומך עכשיו בצורה תקינה בתווים מקודדים של שורות חדשות שמוטמעים במסלולים או ב-URI של קישורים עמוקים. (I513d1, ‏ b/217815060)
  • הוטמעו מ-Navigation 2.5.0-alpha03: מעכשיו, Navigation SafeArgs תומך בשימוש במרחב השמות שמוגדר ב-build.gradle במקום בחבילה ב-AndroidManifest. (I659ef, ‏ b/217414933)
  • הוספה לאחור מ-Navigation 2.5.0-alpha04: Navigation Safe Args לא יתקרוס יותר כשמשתמשים במרחבי שמות ואין AndroidManifest.xml. (I17ccf, ‏ b/227229815)
  • הוספה לאחור מ-Navigation 2.5.0-alpha04: מחרוזות ריקות נחשבות עכשיו לארגומנטים תקינים בקישורי עומק. (I70a0d, ‏ b/217399862)

גרסה 2.4.1

גרסה 2.4.1

9 בפברואר 2022

androidx.navigation:navigation-*:2.4.1 משוחרר. גרסה 2.4.1 מכילה את ההוספות האלה.

תיקוני באגים

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

גרסה

גרסה

26 בינואר 2022

androidx.navigation:navigation-*:2.4.0 משוחרר. גרסה 2.4.0 כוללת את ההצהרות האלה.

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

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

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

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

  • Safe Args יוצר עכשיו שיטה fromSavedStateHandle() לכל כיתה NavArgs. (#122, ‏ b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

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

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

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

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

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

לכך היו השלכות מסוימות על ממשקי ה-API:

  • המאפיין popUpTo ב-Kotlin DSL יצא משימוש לטובת popUpToId.
  • ממשק ה-API ‏getStartDestination() הוצא משימוש לטובת getStartDestinationId().

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

כתיבה בזמן ניווט

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

בגרסה הזו יש:

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

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

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

מידע נוסף זמין במדריך לניווט ב-Compose.

מספר סטאקים של חזרה אחורה

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

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

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

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

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ב-navOptions Kotlin DSL, אפשר להוסיף את הנכס הבוליאני restoreState ואת הנכס הבוליאני saveState ל-popUpTo builder:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • כשיוצרים ידנית אובייקט NavOptions דרך NavOptions.Builder, אפשר להשתמש ב-setRestoreState() ובעומס יתר חדש ל-setPopUpTo() שמקבל פרמטר saveState נוסף.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • קריאות פרוגרמטיות אל popBackStack() יכולות עכשיו לכלול פרמטר saveState נוסף.

  • אפשר להשתמש בשיטה clearBackStack() כדי לנקות כל מצב שנשמר באמצעות popBackStack() או popUpToSaveState.

בכל המקרים, ה-NavController ישמור וישחזר את המצב של כל NavBackStackEntry, כולל כל המופעים של ViewModel ברמת יעד הניווט. ממשקי ה-API של Navigator עודכנו כדי לאפשר לכל Navigator לתמוך בשמירה ובשחזור של המצב שלו.

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

  • NavDeepLinkBuilder מוסיף עכשיו את PendingIntent.FLAG_IMMUTABLE ל-PendingIntent שמוחזר על ידי createPendingIntent(), כדי לוודא שממשק ה-API הזה פועל כצפוי כשמטרגטים ל-Android 12.
  • הניווט תלוי עכשיו ב-Lifecycle 2.3.1, ומסמן את setGraph(),‏ popBackStack(),‏ navigateUp() ו-navigate(), השיטות שמעדכנות את NavBackStackEntry Lifecycle, בתור @MainThread. כך הניווט תואם לאכיפה של פעילות השרשור הראשי שהוצגה ב-Lifecycle 2.3.0.
  • קישורי עומק מוודאים עכשיו שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) נמצאים ב-Uri.
  • עכשיו, סימני הפלחים (hash) נחשבים לארגומנטים שעברו ניתוח באותו אופן שבו נחשבים סימני השאלה, כמפרידים בין קטעי הנתיב, כדי למנוע מצב שבו ארגומנט יכלול את סימן הפלחים.NavDeepLink
  • כשיוצרים פעולות, קוד Kotlin שנוצר מ-Safe Args מציב עכשיו ארגומנטים ללא ערכים שמוגדרים כברירת מחדל לפני ארגומנטים עם ערכים שמוגדרים כברירת מחדל כפרמטרים.
  • כשמנפיקים ארגומנטים, Safe Args מעביר עכשיו פרמטרים ללא ערכי ברירת מחדל לפני פרמטרים עם ערכי ברירת מחדל.
  • Safe-Args תלוי עכשיו בפלאגין של Android Gradle מגרסה 4.2.0. המשמעות היא שאמורה להפסיק להופיע האזהרה לגבי השימוש ב-applicationIdTextResource.

בעיות מוכרות

  • תוקנה ב-Navigation 2.5.0-alpha01: הגישה ל-ViewModel שנוצר באמצעות by navGraphViewModels() מ-onCreate() של Fragment תיכשל עם IllegalStateException. (b/213504272)
  • תוקנה ב-Navigation 2.5.0-alpha01: Safe Args 2.4.0 לא תואם לפלאגין Android Gradle מגרסה 7.1.0 ואילך. (b/213086135)
  • קישורי עומק עם כמה תרשימי ניווט בתצוגת עץ לא יוצרים בצורה נכונה את סטאק החזרה המלא. (b/214383060)

גרסה 2.4.0-rc01

15 בדצמבר 2021

androidx.navigation:navigation-*:2.4.0-rc01 משוחרר. גרסה 2.4.0-rc01 כוללת את ההצהרות האלה.

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

  • עכשיו, כשNavDeepLink מנתח ארגומנטים, הוא מתייחס לסימנים של לירה שטרלינג באותו אופן שבו הוא מתייחס לסימנים שאלה כמפרידים בין ארגומנטים. (I21309, ‏ b/180042703)

תיקוני באגים

  • קישורי עומק לא יתעלמו יותר מארגומנטים עם ערכים זהים לשם של placeholder. (If8017, ‏ b/207389470)
  • אחרי שחזור ה-NavController, NavController לא יתקרוס יותר כשפותחים יעד בתצוגת קופץ באמצעות מעברים. (I0f7c9, ‏ b/205021623)
  • הודעת השגיאה שמופיעה כשמשתמשים ב-startDestination לא תקין תהיה עכשיו ברירת המחדל למסלול של יעד ההתחלה, אם יש כזה. (I86b9d, ‏ b/208041894)

תיקוני באגים ב-Navigation Compose

  • תוקנה קריסה פוטנציאלית שנגרמה כתוצאה ממעבר מהיר בין יעד ההתחלה ליעד אחר באמצעות פריטים בתפריט הניווט התחתון. (Ic8976, ‏ b/208887901)
  • עכשיו יעד הדיאלוג משוחזרים כראוי בחלק העליון של המסך אחרי שינויים בהגדרות או סגירת תהליך. (I4c0dc, ‏ b/207386169)
  • תוקנה בעיה שבה ניסיון לאחזר ViewModel מ-NavBackStackEntry של תיבת דו-שיח נכשל כשתיבת הדו-שיח נסגרה. (I6b96d, ‏ b/206465487)
  • תוקנה בעיה בשימוש ביעדי activity עם NavHost של Navigation Compose, שגרמה ליצירת קומפוזיציות מחדש ללא הגבלה. (I8f64c)
  • תוקן דליף ב-Navigation Compose, שבו המערכת שמרה על הפניה לפעילות הישנה אחרי שינוי בתצורה או סיום תהליך. (I4efcb, ‏ b/204905432)

תיקוני באגים ב-Safe Args

  • SafeArgs לא קורס יותר כשמנסים לשחזר מערכי parcelable מותאמים אישית אחרי סיום התהליך. (I618e8, ‏ b/207315994)
  • תוקן באג ב-safe args שלא איפשר למערכים בוליאניים להכיל ערך null. (I8c396, ‏ b/174787525)

גרסה 2.4.0-beta02

3 בנובמבר 2021

androidx.navigation:navigation-*:2.4.0-beta02 משוחרר. גרסה 2.4.0-beta02 מכילה את ההצהרות האלה.

שינויים ב-API

  • הטיפול בקישורים עמוקים מפורשים ומשתמעים מוסיף עכשיו באופן אוטומטי את הדגל saveState כשמנווטים לתרשים אחר, כדי להבטיח שקוד כמו NavigationUI.setupWithNavController וקוד שמשתמש במספר סטאקים לאחור יפעלו כצפוי. (Ic8807)

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

  • עכשיו, דפוסי קישורי העומק מקובצים באופן עצל ב-NavDeepLink במקום במהלך ההנפקה. הפעולה הזו אמורה לשפר את זמן ההנפקה של תרשימי הניווט שכוללים קישורי עומק. (b8d257, ‏ b/184149935)

תיקוני באגים

  • תוקנה בעיה שבה רשומות NavBackStackEntries נדחפו למטה אל Lifecycle.State.CREATED אחרי המעבר אל Lifecycle.State.STARTED, כאשר ה-NavHost נוסף ישירות ל-setContent() של הפעילות. (Ia5ac1, ‏ b/203536683)
  • תוקנה בעיה של תנאי מרוץ (race condition) שבה הוצאה של יעד DialogFragment מהמקבץ האחורי לפני שהתיבת הדו-שיח הוצגה בפועל לא סגרה את תיבת הדו-שיח בפועל, וכתוצאה מכך התרחש קריסה כשהמשתמש סגר את תיבת הדו-שיח השגויה באופן ידני. (I687e5)
  • תוקנה בעיה שבה ה-API של onNavDestinationSelected ב-NavigationUI החזיר את הערך true גם אם לא ביצעתם navigate() לתרשים הניווט הזה בפועל. עכשיו הוא משתמש באותה לוגיקה שבה setupWithNavController משתמש באופן פנימי כדי לבחור רק את MenuItem שמשויך ליעד הנוכחי באמצעות hierarchy של היעד. (I2b053)

גרסה 2.4.0-beta01

27 באוקטובר 2021

androidx.navigation:navigation-*:2.4.0-beta01 משוחרר. גרסה 2.4.0-beta01 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו אפשר להשתמש ב-by navGraphViewModel עם נתיב כחלופה לשימוש במזהה, כדי לספק תמיכה טובה יותר בשימוש ב-Navigation Kotlin DSL עם 'קטעים'. (I901e3, ‏ b/201446416)

שינויים ב-API

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

תיקוני באגים

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

תיקוני באגים

  • התכונה 'ניווט דינמי' לא תקרוס יותר כשהפעילות תיווצר מחדש. (Ifa6a3, ‏ b/197942869)
  • תוקנה בעיה בלחצן החזרה אחורה במערכת, שמתרחשת רק אחרי חזרה לאחור ליעד שאפשר ליצור ממנו קובץ שמורכב מכמה רכיבים, שמכיל NavHost. (3ed148, ‏ b/195668143)
  • עכשיו, SafeArgs יוצר את הארגומנטים של fromBundle() ו-fromSavedStateHandle() בסדר הפרמטרים הנכון. (I824a8, b/200059831)

גרסה 2.4.0-alpha09

15 בספטמבר 2021

androidx.navigation:navigation-*:2.4.0-alpha09 משוחרר. גרסה 2.4.0-alpha09 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו אפשר להשתמש ב-method‏ clearBackStack() כדי לנקות כל מצב ששמור באמצעות popBackStack() או popUpToSaveState. (I80a0f)
  • עכשיו אפשר להעביר רשימה של ארגומנטים ו/או קישורים עומק ל-builder של תרשים הניווט המורכב, והם יתווספו באופן אוטומטי לתרשים שנוצר. (I8a470, ‏ b/182545357)

שינויים ב-API

  • הפונקציה navArgument של Kotlin DSL היא עכשיו חלק מ-navigation-common במקום מ-navigation-compose. כדי להמשיך להשתמש בפונקציה הזו, תצטרכו לעדכן את הייבוא. (I1d095)

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

  • כשמנפיקים ארגומנטים, Safe Args מעביר עכשיו פרמטרים ללא ערכי ברירת מחדל לפני פרמטרים עם ערכי ברירת מחדל. (I89709, ‏ b/198493585)

תיקוני באגים

  • כשמשתמשים ב-Navigation Compose, ה-NavGraphs יהיו DESTROYED רק אחרי שכל הצאצאים שלהם יהיו DESTROYED. (I86552, ‏ b/198741720)
  • לא נדרשים יותר ערכי ברירת מחדל לארגומנטים NavDeepLink שניתנים לשינוי. (Ia14ef, ‏ b/198689811)
  • קריאה ל-setGraph() עם תרשים חדש תגרום עכשיו גם לניקוי של כל ערימות ה-back stack שנשמרו, בנוסף להתנהגות הקודמת של הוצאה מהמצב המאוחסן של ערימת ה-back stack. (I97f96)
  • תוקנה בעיה שבה לא התקבלו התראות במכונות OnDestinationChangedListener וב-currentBackStackEntryFlow כשמשתמשים ב-launchSingleTop. (Iaaebc)

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

גרסה 2.4.0-alpha08

1 בספטמבר 2021

androidx.navigation:navigation-*:2.4.0-alpha08 משוחרר. גרסה 2.4.0-alpha08 כוללת את ההוספות האלה.

תכונות חדשות

  • עכשיו אפשר להרחיב את הכיתה NavType כדי ליצור NavTypes מותאמים אישית. יש תמיכה בסוגי נתונים מותאמים אישית רק כשיוצרים את תרשים הניווט באופן פרוגרמטי, למשל באמצעות Navigation Graph Kotlin DSL. (I78440, ‏ b/196871885)

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

  • כשיוצרים פעולות, קוד Kotlin שנוצר מ-Safe Args מציב עכשיו ארגומנטים ללא ערכים שמוגדרים כברירת מחדל לפני ארגומנטים עם ערכים שמוגדרים כברירת מחדל כפרמטרים. (Idb697, ‏ b/188855904)
  • קישורי עומק מוודאים עכשיו שכל הארגומנטים הנדרשים (אלה ללא ערכי ברירת מחדל) נמצאים ב-Uri. (#204, b/185527157)

תיקוני באגים

  • שימוש ב-getBackStackEntry וב-previousBackStackEntry בתוך composable(), בשילוב עם remember(), לא יגרום יותר לחריגה במקרה שאין יעד ב-back stack. (I75138, ‏ b/194313238)
  • עכשיו, כשמשנים את הארגומנטים של ה-stack בחזרה ומשתמשים ב-launchSingleTop=true, ה-Navigation Compose יוצר מחדש את הקוד בצורה תקינה. (Iebd69, ‏ b/186392337)
  • לא תהיה יותר ArrayIndexOutOfBoundsException כשקוראים ל-setGraph עם תרשים עם 13 או 29 יעדים. (I1a9f1, ‏ b/195171984)
  • הבעיה שבה הגנרטור של SafeArgs ב-Java גורם לאזהרות על שגיאות בקוד בזמן יצירת כיתות Args אמורה להיפתר. (I1a666, ‏ b/185843837)

תרומה חיצונית

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

גרסה 2.4.0-alpha07

18 באוגוסט 2021

androidx.navigation:navigation-*:2.4.0-alpha07 משוחרר. גרסה 2.4.0-alpha07 מכילה את ההצהרות האלה.

תיקוני באגים

  • עכשיו, כשמשתמשים בתכונה 'עריכת נתיב ניווט', המצב נשמר כראוי אחרי שינויים בהגדרות וכשמשנים גרפים, גם אם משתמשים בכמה סטאקים של חזרה אחורה. (If5a3d, ‏ b/195141957)
  • בחירת אותו כרטיסייה מחדש כשמשתמשים בתכונה 'כתיבה בזמן ניווט' עם כמה ערימות חזרה לא תגרום יותר למסך ריק. (I860dc, ‏ b/194925622)
  • NavHost מזהה עכשיו שינויים ב-Lifecycle.State של NavBackStackEntry, כלומר שימוש ב-NavHost בחלקיק יתבצע עכשיו מחדש כאשר מחזור החיים ישתנה, במקום להוביל למסך ריק. (I4eb85, ‏ b/195864489)
  • תוקנה בעיה שבה סגירת DialogFragment לא עדכנה בצורה נכונה את המצב NavController אחרי יצירת מחדש של הפעילות (כלומר, אחרי שינוי בהגדרות). (Icd72b)
  • תוקנה בעיה שבה הצגת חלון דיאלוג לא מעדכנת את הטיפול של NavController בלחצן החזרה אחורה במערכת, וכתוצאה מכך יכול להיות ש-NavController יפריע ללחצן החזרה אחורה גם אם אין לו סטאק חזרה אחורה להצגה. (If3b34)
  • Safe-args יוצר עכשיו באופן אוטומטי שיטה toSavedStateHandle לפרמטרים, שאפשר להשתמש בה כדי לבדוק את הקוד של ViewModel. (If1e2d, ‏ b/193353880)

גרסה 2.4.0-alpha06

4 באוגוסט 2021

androidx.navigation:navigation-*:2.4.0-alpha06 משוחרר. גרסה 2.4.0-alpha06 מכילה את ההצהרות האלה.

שינויים ב-API

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

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

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

תיקוני באגים

  • הצגת היעד האחרון של תרשים ניווט כבר לא מפעילה את השגיאה ClassCastException. (If0543, ‏ b/172112072, ‏ b/194301889)
  • תוקן NullPointerException שהתרחש כשמוסיפים קישור עומק ללא Uri ומנווטים דרך מסלול או קישור עומק. (938a0c, ‏ b/193805425)
  • תוקנה בעיה בתכונה 'כתיבה בזמן ניווט', שבה NavBackStackEntry עם קישור עומק לא הגיע למצב RESUMED. (I192c5)
  • תוקנה בעיה שבה הצגת חלון דו-שיח לא עדכנה את הטיפול של NavController בלחצן החזרה אחורה במערכת, מה שעלול לגרום ל-NavController ליירט את לחצן החזרה אחורה גם אם אין לו סטאק חזרה אחורה להצגה. (aosp/1782668)

גרסה 2.4.0-alpha05

21 ביולי 2021

androidx.navigation:navigation-*:2.4.0-alpha05 משוחרר. גרסה 2.4.0-alpha05 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

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

  • כשמשתמשים ב-NavHost בתכונה 'כתיבה בזמן ניווט', עכשיו תמיד נעשה שימוש במעברים חלקים בין קטעים כשעוברים בין יעדים. (I07049, ‏ b/172112072)
  • עכשיו אפשר לבצע שינויים בתרשים של NavHost. תרשים עם אותו startDestination ועם אותם יעדים בתרשים ייחשב כזהה, ולא ינקה את NavController back stack. (I0b8db, ‏ b/175392262)

תיקוני באגים

  • תוקנה בעיה מסוג NoSuchElementException כשקוראים ל-popBackStack() מתוך LifecycleObserver שמצורף ל-NavBackStackEntry, שנגרמה כתוצאה מעדכונים חוזרים למצב של NavController. (I64621)
  • AbstractListDetailFragment מאפשר עכשיו להסיר את SlidingPaneLayout לחלוטין מה-APK כשלא משתמשים ב-AbstractListDetailFragment. (I611ad)
  • עכשיו, NavGraph ו-NavDestination מבטלים את השיטה equals, כך ששני אובייקטים עם אותם ערכים ייחשבו זהים. (I166eb, ‏ b/175392262)

גרסה 2.4.0-alpha04

1 ביולי 2021

androidx.navigation:navigation-*:2.4.0-alpha04 משוחרר. גרסה 2.4.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

  • הארטיפקט navigation-fragment מכיל עכשיו הטמעה מוכנה מראש של פריסה עם שתי חלוניות באמצעות AbstractListDetailFragment החדש. בקטע הזה נעשה שימוש ב-SlidingPaneLayout כדי לנהל חלונית רשימה (שסופקת על ידי תת-הסוג) וחלונית פרטים, שבה נעשה שימוש ב-NavHostFragment כהטמעה שלה, כפי שמוצג בהטמעת הדוגמה. (Iac4be, ‏ b/191276636)
  • ה-NavHost של הארטיפקט navigation-compose תומך עכשיו ביעדים מסוג dialog בנוסף ליעדים מסוג composable. כל אחד מהיעדים של תיבת הדו-שיח יוצג בתוך Dialog שאפשר לערוך, מרחף מעל היעד הנוכחי composable. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

שינויים ב-API

  • השם של הפונקציה add ב-NavigatorState השתנה ל-push. כל הקריאות הנוכחיות ל-add() צריכות להשתנות ל-push().‏ (Ie89fc, ‏ b/172112072)
  • עכשיו אפשר להשתמש בממשקי ה-API pushWithTransaction ו-popWithTransition ב-NavigatorState במכונות Navigator בהתאמה אישית כדי לדחוף או להוציא יעד באופן אסינכרוני. חשוב לדעת שעדיין אף אחד מהנווטים הכלולים לא משתמש בממשקי ה-API האלה. (Ic4d7c, ‏ b/172112072)

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

  • NavDeepLinkBuilder מוסיף עכשיו את PendingIntent.FLAG_IMMUTABLE ל-PendingIntent שמוחזר על ידי createPendingIntent(), כדי לוודא שממשק ה-API הזה פועל כצפוי כשמטרגטים ל-Android 12. (If8c52)

תיקוני באגים

  • תוקנה בעיה ב-<include-dynamic> שבה הארגומנטים שהועברו לתרשים לא הועברו בצורה נכונה לתרשים שנוסף באופן דינמי. (I3e115)
  • תוקנה בעיה ב-NullPointerException כשמנווטים ליעד באמצעות ארגומנט string[] עם ערך ברירת מחדל של @null. (I1fbe8)
  • הוספת כללי ProGuard ל-@Navigator.Name, לפתרון בעיות בשימוש במצב מלא של R8 3.1. (I2add9, ‏ b/191654433)
  • SafeArgs לא ייכשל יותר בזמן ה-build של האפליקציה עם גרסאות Kotlin שקודמות ל-1.5.0. (Icd1ff, ‏ b/190739257)

גרסה 2.4.0-alpha03

16 ביוני 2021

androidx.navigation:navigation-*:2.4.0-alpha03 משוחרר. גרסה 2.4.0-alpha03 מכילה את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה שבה נדרשו שתי קריאות ל-navigate() כדי לנווט לגרף דינמי שכלול. (I7785c, ‏ b/188859835)
  • תוקנה נסיגה (regression) בניווט 2.4.0-alpha01 שבה setupActionBarWithNavController() לא הסיר כראוי את סמל למעלה כשנמצאים ביעד ברמה העליונה. (I5d443, ‏ b/189868637)
  • תוקנה בעיה ב-IllegalStateException כשקוראים ל-popBackStack() אחרי שקודם לכן הוצאתם את תרשים הבסיס של NavController. (I2a330, ‏ b/190265699)
  • עכשיו כללי ProGuard ל-by navArgs() חלים כראוי כשמשתמשים ב-navigation-common או בכל ארטיפקט שמבוסס עליו. (I68800, ‏ b/190082521)
  • OnDestinationChangedListener שמפעיל navigate() בפעם הראשונה שהוא מקבל שיחה חוזרת מקבל עכשיו שיחה חוזרת שנייה עם היעד שאליו מנווט. (Ie5f9e, ‏ b/190228815)
  • Safe Args לא קורס יותר כשמשתמשים בו עם מודולים דינמיים של תכונות ו-AGP מגרסה 7.0 ואילך. (I69518, ‏ b/189966576)

בעיה ידועה

  • כשמשתמשים ב-Gradle 6.7.0, Safe Args נכשל עם שגיאה Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ בגלל תלות בגרסה ישנה יותר של Kotlin. כדי לעקוף את הבעיה, צריך לעדכן את Gradle לגרסת 7.0. (b/190739257)

גרסה 2.4.0-alpha02

2 ביוני 2021

androidx.navigation:navigation-*:2.4.0-alpha02 משוחרר. גרסה 2.4.0-alpha02 מכילה את ההצהרות האלה.

תכונות חדשות

  • מעכשיו יש תמיכה במסלולים ליעדי Activity, ‏ Fragment ו-Dialog, וגם ב-DynamicNavigation Kotlin DSL. (Ib5544, ‏ Ia617b, ‏ I22f96, ‏ b/188914648, ‏ b/188901565)
  • NavigationUI הוסיף באופן זמני ממשקי API ניסיוניים כדי לאפשר לכם לבטל את ההסכמה לשמירת המצב. אמנם תמיד כדאי לשמור את המצב, אבל עדיין יש שימושים בספריות שהוצאו משימוש (כלומר, קטעי קוד שנשמרו) שלא ניתן לתמוך בהם כששומרים את המצב. לכן, זו הזדמנות לאפליקציות לעבור בהדרגה ממשקי API שלא נתמכים. (Idf93c)
  • רכיב הניווט מספק עכשיו ממשקי API של findDestination() ו-getHierarchy() שאפשר להשתמש בהם כדי להטמיע ממשק משתמש מותאם אישית של Navigation. findDestination() היא פונקציית תוסף של NavGraph שמאתרת יעד בתרשים. getHierarchy() היא פונקציה ב-NavDestination שאפשר להשתמש בה כדי לוודא אם יעד נתון נמצא בהיררכיה של יעד אחר.(I2932f, ‏ b/188183365)

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

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

שינויים ב-API

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

תיקוני באגים

  • DialogFragmentNavigator משתמש עכשיו ב-NavigatorState.pop() API כדי להודיע ל-NavController כשתיבת דו-שיח נסגרת בלחיצה על לחצן החזרה למערכת או בלחיצה מחוץ לתיבת הדו-שיח, וכך להבטיח שהמצב של NavController תמיד מסתנכרן עם המצב של Navigator. (I2ead9)
  • כשמשתמשים בקריאה חוזרת (callback) של onDestinationChanged כדי לבצע פעולות על רשימת OnDestinationChangedListeners, המערכת לא מחזירה יותר את הערך ConcurrentModificationException. (Ib1707, ‏ b/188860458)

  • Safe Args לא קורס יותר כשמנסים ליצור מאפייני כיוון ב-Kotlin. (Id2416, ‏ b/188564435)

  • השיטה setId ב-NavDestination מסומנת עכשיו כראוי ב-@IdRes, כך שהיא מקבלת רק מזהי משאבים. (I69b80)

  • הפרמטר int של findNode הוא עכשיו resId במקום resid. (I7711d)

עדכון יחסי תלות

  • Safe-Args תלוי עכשיו בפלאגין של Android Gradle מגרסה 4.2.0. המשמעות היא שאמורה להפסיק להופיע האזהרה לגבי השימוש ב-applicationIdTextResource. (I6d67b, ‏ b/172824579)

גרסה 2.4.0-alpha01

18 במאי 2021

androidx.navigation:navigation-*:2.4.0-alpha01 משוחרר. גרסה 2.4.0-alpha01 מכילה את ההצהרות האלה.

תכונות חדשות

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

מספר סטאקים של חזרה אחורה

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

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

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

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

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ב-navOptions Kotlin DSL, אפשר להוסיף את הנכס הבוליאני restoreState ואת הנכס הבוליאני saveState ל-popUpTo builder:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • כשיוצרים ידנית אובייקט NavOptions דרך NavOptions.Builder, אפשר להשתמש ב-setRestoreState() ובעומס יתר חדש ל-setPopUpTo() שמקבל פרמטר saveState נוסף.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • קריאות פרוגרמטיות אל popBackStack() יכולות עכשיו לכלול פרמטר saveState נוסף.

בכל המקרים, ה-NavController ישמור וישחזר את המצב של כל NavBackStackEntry, כולל כל המופעים של ViewModel ברמת יעד הניווט. ממשקי ה-API של Navigator עודכנו כדי לאפשר לכל Navigator לתמוך בשמירה ובשחזור של המצב שלו.

ה-ComposeNavigator שמשמש ליעדי composable בתכונה 'כתיבה בזמן ניווט', וה-FragmentNavigator ו-DynamicFragmentNavigator שמשמש ליעדי <fragment> בתכונה 'ניווט באמצעות קטעים', עודכנו כך שישתמשו בממשקי ה-API החדשים של Navigator וישפרו את התמיכה בשמירת המצב ובשחזור שלו.

מסלולי ניווט

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

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

לכך היו השלכות מסוימות על ממשקי ה-API:

  • המאפיין popUpTo ב-Kotlin DSL יצא משימוש לטובת popUpToId. (I59c73, ‏ b/172823546)
  • ממשק ה-API ‏getStartDestination() הוצא משימוש לטובת getStartDestinationId(). (I0887f, ‏ b/172823546)

מפתחים שמשדרגים מגרסאות קודמות של Navigation Compose ל-Navigation Compose 2.4.0-alpha01 צריכים להסיר את הייבוא הבא בשיטות התוסף, כי הוא כבר לא נדרש:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

הארגומנט KEY_ROUTE הוחלף בנכס route ב-NavDestination, וכך אפשר לקרוא ל-navBackStackEntry.destination.route ישירות.

שינויים ב-API

  • כל פריטי המידע שנוצרו בתהליך הפיתוח (artifacts) של Navigation נכתבו מחדש ב-Kotlin. בעקבות זאת, חל שיפור ביכולת של כיתות להחזיק ערך null באמצעות גנריקים (כמו תת-כיתות של NavType). כל פונקציות ההרחבה של Kotlin שהיו חלק מהארטיפקטים של -ktx הועברו לארטיפקטים הראשיים שלהן. הארטיפקטים של -ktx ימשיכו להתפרסם, אבל הם יהיו ריקים לחלוטין. (b/184292145)
  • NavDeepLinkBuilder תומך עכשיו בהוספת כמה יעדים נפרדים למחסנית הקודקודים הקודמת שנוצרת. (I3ee0d, ‏ b/147913689)
  • הוספת פונקציות ייצור ל-DynamicNavHostFragment (Icd515, ‏ b/175222619)
  • המזהה הייחודי של NavBackStackEntry נחשף עכשיו כחלק מ-API הציבורי שלו. (Ie033a)
  • השדות name ו-argument ופונקציות הפירוק של NamedNavArgument הן עכשיו ציבוריות. (#174, ‏ b/181320559)
  • הוספנו את התוסף החדש NavBackStackEntry#provideToCompositionLocals שמספק את NavBackStackEntry ל-locals הרלוונטיים של הקומפוזיציה. (#175, ‏ b/187229439)

Safe Args

  • Safe Args יוצר עכשיו שיטה fromSavedStateHandle() לכל כיתה NavArgs. (#122, ‏ b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • עדכנו את Safe Args כך שיהיה תלוי ב-KotlinPoet 1.8.0. (#172, ‏ b/183990444)

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

  • הניווט תלוי עכשיו ב-Lifecycle 2.3.1, ומסמן את setGraph(),‏ popBackStack(),‏ navigateUp() ו-navigate(), השיטות שמעדכנות את NavBackStackEntry Lifecycle, בתור @MainThread. כך הניווט תואם לאכיפה של פעילות השרשור הראשי שהוצגה ב-Lifecycle 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 ואילך.

תיקוני באגים

  • תוקנה בעיה שבה תוספי ארגומנטים בסוף הקוד היו מקבלים עדיפות על פני קישורי עומק עם סיומת תואמת. (#153, ‏ b/184072811)
  • NavHostFragment תומך עכשיו ב-Navigators מותאמים אישית שמשתמשים באותו @Navigator.Name("dialog") כמו DialogFragmentNavigator שמוגדרת כברירת מחדל. (Ib1c2c, ‏ b/175979140)
  • שיפרנו את ההתנהגות של NavigatorProvider#addNavigator כדי לוודא שקריאה חוזרת ונשנית אליו עם אותה מכונה לא גורמת לבעיות. (#176, ‏ b/187443146)

תרומות חיצוניות

  • תודה ל-simonschiller על הוספת תמיכה ב-Safe Args ליצירת שיטת fromSavedStateHandle() לכל כיתה מסוג NavArgs. (#122, ‏ b/136967621)
  • תודה ל-Bradleycorn על כך שהפך את הניתוח של ארגומנטים מסוג Enum מקישורים עומק ללא קשר לרישיות. (#152, ‏ b/135857840)
  • תודה ל-osipxd על תיקון בעיה שבה placeholder לארגומנטים בסוף הטקסט מקבל עדיפות על פני קישורי עומק עם סיומת תואמת. (#153, ‏ b/184072811)
  • תודה ל-tatocaster על עדכון Safe Args כך שיהיה תלוי ב-KotlinPoet 1.8.0. (#172, ‏ b/183990444)
  • תודה ל-jossiwolf על כך שהפך את השדות name ו-argument ואת פונקציות הפירוק של NamedNavArgument לציבוריות. (#174, ‏ b/181320559)
  • תודה ל-jossiwolf על הצגת התוסף החדש NavBackStackEntry#provideToCompositionLocals שמספק את הערך של NavBackStackEntry ל-locals הרלוונטיים של היצירה. (#175, ‏ b/187229439)
  • תודה ל-jossiwolf על שיפור ההתנהגות של NavigatorProvider#addNavigator כדי לוודא שהפעלה חוזרת של הפונקציה עם אותה מכונה לא גורמת לבעיות. (#176, ‏ b/187443146)

גרסה 1.0.0-alpha10

7 באפריל 2021

androidx.navigation:navigation-compose:1.0.0-alpha10 משוחרר. גרסה 1.0.0-alpha10 מכילה את ההצהרות האלה.

שינויים ב-API

  • NavHost מקבל עכשיו Modifier, שמועברים לקונטיינר הניתן לקיפול שמקיף את הרכיבים הניתנים לקיפול של היעד. (I85aca, ‏ b/175125483)

תיקוני באגים

  • NavHost פועל עכשיו גם אם לא נמצא OnBackPressedDispatcherOwner, למשל כשמציגים תצוגה מקדימה של NavHost. (I7d8b4)
  • עכשיו, 'כתיבה בזמן ניווט' תלויה בניווט 2.3.5, וכך נפתרה בעיה בשימוש ב-BackHandler בתוך יעד NavHost. (I7e63b, ‏ b/182284739)

גרסה 1.0.0-alpha09

10 במרץ 2021

androidx.navigation:navigation-compose:1.0.0-alpha09 משוחרר. גרסה 1.0.0-alpha09 מכילה את ההוספות האלה.

שינויים ב-API

  • הפונקציה LocalViewModelStoreOwner.current מחזירה עכשיו ViewModelStoreOwner שאפשר להעביר לו ערך null, כדי לקבוע טוב יותר אם ViewModelStoreOwner זמין בהרכב הנוכחי. ממשקי API שדורשים ViewModelStoreOwner, כמו viewModel() ו-NavHost, עדיין גורמים להפעלת חריגה אם לא מגדירים ViewModelStoreOwner. (Idf39a)

תיקוני באגים

  • Navigation Compose תלוי עכשיו ב-Navigation 2.3.4, שכוללת את התיקון לניסיון להגדיר את אותו אובייקט ViewModelStore אחרי הגדרת התרשים. (I65c24, ‏ b/177825470)

גרסה 1.0.0-alpha08

24 בפברואר 2021

androidx.navigation:navigation-compose:1.0.0-alpha08 משוחרר. גרסה 1.0.0-alpha08 מכילה את ההוספות האלה.

תכונות חדשות

  • NavHost מאכלס עכשיו את LocalSavedStateRegistryOwner CompositionLocal ב-NavBackStackEntry של היעד הזה, כדי להבטיח שכל מצב שנשמר ישירות ב-SavedStateRegistry יישמר ויוחזר לצד היעד. (I435d7, ‏ b/179469431)

גרסה 1.0.0-alpha07

10 בפברואר 2021

androidx.navigation:navigation-compose:1.0.0-alpha07 משוחרר. גרסה 1.0.0-alpha07 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

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

גרסה 1.0.0-alpha06

28 בינואר 2021

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

שינויים ב-API

  • נוספה שיטת תוסף getBackStackEntry(route: String) ב-NavController שמחזירה את NavBackStackEntry המשויך. (If8931)

גרסה 1.0.0-alpha05

13 בינואר 2021

androidx.navigation:navigation-compose:1.0.0-alpha05 משוחרר. גרסה 1.0.0-alpha05 מכילה את ההוספות האלה.

העדכון מותנה ב-Compose 1.0.0-alpha10.

גרסה 1.0.0-alpha04

16 בדצמבר 2020

androidx.navigation:navigation-compose:1.0.0-alpha04 משוחרר. גרסה 1.0.0-alpha04 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

  • עודכן לתאימות עם Compose 1.0.0-alpha09.

גרסה 1.0.0-alpha03

2 בדצמבר 2020

androidx.navigation:navigation-compose:1.0.0-alpha03 משוחרר. גרסה 1.0.0-alpha03 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה שבה הפונקציות popBackStack() ו-navigateUp() לא עבדו אחרי שינוי בתצורה או אחרי שהתהליך הושבת ונוצר מחדש. (Icea47, ‏ b/173281473)
  • הניווט לתרשים בתצוגת עץ ב-NavHost פועל עכשיו כמו שצריך. (I0948d, ‏ b/173647694)

גרסה 1.0.0-alpha02

11 בנובמבר 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 משוחרר. גרסה 1.0.0-alpha02 מכילה את ההצהרות האלה.

שינויים ב-API

  • רכיב ה-Navigation compose תומך עכשיו ב-NavOptions לשימוש בפעולות popUpTo ו-launchSingleTop (If96c3, b/171468994)
  • נוספה פונקציית ניווט שמקבלת מסלול במקום מזהה, ומאפשרת ליצור תרשימים בתצוגת עץ ב-Navigation Compose DSL. (I1661d)
  • עכשיו, startDestination מופיע לפני המסלול ברשימת הפרמטרים של NavHost‏ (Ie620e)
  • עכשיו אפשר ליצור תרשים באמצעות המסלול בתור יעד התחלה מחוץ ל-composable של NavHost. (Iceb75)

גרסה 1.0.0-alpha01

28 באוקטובר 2020

android.navigation:navigation-compose:1.0.0-alpha01 משוחרר. גרסה 1.0.0-alpha01 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

תכונות חדשות

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

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

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

מידע נוסף זמין במדריך לניווט ב-Compose.

גרסה 2.3.5

גרסה 2.3.5

7 באפריל 2021

androidx.navigation:navigation-*:2.3.5 משוחרר. גרסה 2.3.5 מכילה את ההוספות האלה.

תכונות חדשות

  • כשמנווטים באמצעות NavDeepLinkRequest או Uri, עכשיו אפשר לגשת ל-Uri, לפעולה ולסוג ה-MIME ביעד שנוצר על ידי אחזור הכוונה מהארגומנטים דרך KEY_DEEP_LINK_INTENT, כפי שאפשר לעשות כבר בקישור עומק חיצוני. (I975c3, ‏ b/181521877)

תיקוני באגים

  • OnBackPressedCallbacks נוסף למפזר עם NavBackStackEntry, כי LifecycleOwner עכשיו מיירט בחזרה כראוי אחרי שמחזור החיים של הפעילות הוא STOPPED, ואז STARTED (Iff94f, b/182284739)
  • ניתוח הדומיין של קישור העומק לא תלוי עיצוב עכשיו, כך ש-www.example.com תואם גם ל-www.example.com וגם ל-www.Example.com. חשוב לזכור שעדיין יש הבחנה בין אותיות רישיות לקטנות בשמות של פרמטרים של שאילתות. (#144, ‏ b/153829033)
  • תוקנה שגיאת NullPointerException שעלולה להתרחש כשליעד יש כמה ארגומנטים שמוגדרים כברירת מחדל ולא ניתנים לאפס, ואתם מנווטים ליעד הזה תוך שינוי רק של קבוצת משנה של הארגומנטים האלה. (aosp/1644827)

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

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

תרומה חיצונית

  • תודה ל-bentrengrove על בקשת המשיכה (pull request) שבעזרתה הניתוח של דומיינים של קישורי עומק לא תלוי רישיות. (#144, ‏ b/153829033)

גרסה 2.3.4

גרסה 2.3.4

10 במרץ 2021

androidx.navigation:navigation-*:2.3.4 משוחרר. גרסה 2.3.4 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו אפשר לנתח כראוי את הארגומנטים של ReferenceType כשהם נשלחים כחלק מ-URI של קישור עומק. אפשר להזין את הערך של המספר השלם הגולמי וגם ערכים הקסדצימליים עם הקידומת 0x. (#127, ‏ b/179166693)
  • עכשיו יש תמיכה בערכים שמוגדרים כברירת מחדל של מספרים שלמים ב-android:defaultValue של ארגומנט עם app:argType="float", כך שאפשר להשתמש ב-android:defaultValue="0" במקום ב-0.0. (#117, ‏ b/173766247)

תיקוני באגים

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

תרומות חיצוניות

  • תודה ל-JvmName על בקשת המשיכה (pull request) שבעזרתה אפשר עכשיו לנתח כראוי את הארגומנטים של ReferenceType כשהם נשלחים כחלק ממזהה URI של קישור עומק. (#127, ‏ b/179166693)
  • תודה ל-tatocaster על בקשת המשיכה (pull request) שאפשרה ל-defaultValue עבור ארגומנט עם app:argType=”float” לתמוך עכשיו בערכי ברירת מחדל שלמים. (#117, ‏ b/173766247)

גרסה 2.3.3

גרסה 2.3.3

27 בינואר 2021

androidx.navigation:navigation-*:2.3.3 משוחרר. גרסה 2.3.3 מכילה את ההוספות האלה.

תיקוני באגים

  • לא מתרחש יותר קריסה כשפוצצים NavBackStackEntry לפני ש-Lifecycle שלו מועבר ל-CREATED. (Ie3ba3)
  • תוקנה רגרסיה שנגרמה על ידי b/171364502, שבה ניווט לפעילות עם ערך משאב אנימציה של 0 גרם ל-ResourceNotFoundException. (I7aedb, ‏ b/176819931)

גרסה 2.3.2

גרסה 2.3.2

2 בדצמבר 2020

androidx.navigation:navigation-*:2.3.2 משוחרר. גרסה 2.3.2 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן נסיגה ב-NavigationUI שבה שימוש ביעד <activity> עם onNavDestinationSelected לא מאפשר לנווט לפעילות. (I22e34, ‏ b/171364502)
  • תוקנה בעיה שבה הפקודה navigation-dynamic-features-fragment גרמה לניווט ליעד החדש שהותקן כמה פעמים. (aosp/1486056, ‏ b/169636207)
  • תוקנה בעיה שבה ארגומנטים שמוגדרים כברירת מחדל לא נשלחו למכונות OnDestinationChangedListener כשמשתמשים ב-launchSingleTop. (I2c5cb)
  • תוקנה בעיה שבה ניווט לתרשים ניווט בתצוגת עץ לא יצר מופע תרשים חדש בסטאק העורפי. (Ifc831)
  • תוקנה בעיה שבה שימוש ב-navigate() עם popUpTo שהסיר את היעד האחרון בתרשים ניווט לא גרם להרס מיידי של תרשים הניווט עצמו והסרה שלו מהמקבץ האחורי. (I910a3)
  • Navigation SafeArgs משתמש עכשיו ב-KotlinPoet בגרסה 1.7.2, שמוסיפה תמיכה במצב ה-API המפורש של Kotlin. (I918b5)
  • NavHostFragment.findNavController(Fragment) בודק עכשיו גם את תצוגת ה-decor ברמה הבסיסית של DialogFragment, בנוסף לבדיקות הקיימות של היררכיית ה-Fragment ושל היררכיית התצוגה של ה-Fragment. כך תוכלו לבדוק קטעי תיבת דו-שיח שמשתמשים בתכונה 'ניווט' באמצעות FragmentScenario ו-Navigation.setViewNavController(). (I69e0d)

גרסה 2.3.1

גרסה 2.3.1

14 באוקטובר 2020

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

תכונות חדשות

  • מקורות האנימציה שמוגדרים כברירת מחדל נוספו לממשק המשתמש של הניווט, ומומלץ להשתמש בהם במקום במקורות האנימציה שמוגדרים כברירת מחדל. (b/167430145)
  • NavOptions משנה עכשיו את השיטות hashcode ו-equals (b/161586466)
  • הניווט כולל עכשיו את היעד הנוכחי ב-IllegalArgumentException‏ "No destination with ID", מה שצפוי לשפר את חוויית ניפוי הבאגים של המפתחים. (b/168311416)

תיקוני באגים

  • Safe Args לא יאחז יותר את שורת ההחזרה, גם אם שם הכיתה של הארגומנט שנוצר ארוך מ-100 תווים. (b/168584987)

שינויים ביחסי התלות

  • navigation-ui תלוי עכשיו ב-DrawerLayout 1.1.1, כדי לוודא ש-NavigationUI יוכל לפתוח את חלונית ההזזה גם כשמשתמשים ב-LOCK_MODE_LOCKED_CLOSED או ב-LOCK_MODE_LOCKED_OPEN. (b/162253907)
  • Safe Args תלוי עכשיו ב-KotlinPoet 1.6.0‏ (aosp/1435911)
  • Safe Args תלוי עכשיו ב-AGP 4.0.1‏ (aosp/1442337)

גרסה 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 שמשויך לכל יעד ב-Navigation back stack באמצעות SavedStateHandle, שמתאים לאחסון כמויות קטנות של מצב ששמור וצריך לשייך לרשומה מסוימת ב-back stack. מידע נוסף זמין במאמר החזרת תוצאה ליעד הקודם.
  • תמיכה ב-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 שהיה זמין בעבר. מעכשיו, NavController תומך בניווט לפי כל שילוב של השדות האלה באמצעות הכיתה החדשה NavDeepLinkRequest. (b/136573074, ‏ b/135334841)

שינויים ב-API

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

תיקוני באגים

  • תוקנה בעיה שבה מערכת Google Ads התעלמה מ-Intents של קישורי עומק כשנעשה שימוש ביעד התחלה בתצוגת עץ. (b/154532067)

גרסה 2.3.0-alpha05

15 באפריל 2020

androidx.navigation:navigation-*:2.3.0-alpha05 משוחרר. גרסה 2.3.0-alpha05 מכילה את ההצהרות האלה.

תכונות חדשות

  • בהכללות של תרשים דינמי באמצעות <include-dynamic>, כבר אין צורך לציין את app:graphPackage, והמערכת תשתמש באפשרות ברירת המחדל על ידי הוספת הסיומת moduleName ל-applicationId אחרי נקודה. אם אתם צריכים להתאים אישית את graphPackage, עכשיו יש תמיכה ב-${applicationId} placeholder. (b/152696768)
  • ב-Navigation Graph Kotlin DSL יש עכשיו defaultArguments Map לפעולות, שמשקף את היכולת להגדיר ערכי ברירת מחדל לאלמנטי <action> בקובצי XML של Navigation. (b/150345605)

תיקוני באגים

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

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

גרסה 2.3.0-alpha04

18 במרץ 2020

androidx.navigation:navigation-*:2.3.0-alpha04 משוחרר. גרסה 2.3.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

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

שינויים ב-API

  • בכיתה DynamicExtras אין יותר שימוש בתבנית build, ועכשיו אפשר ליצור אותה ישירות. (aosp/1253671)
  • עכשיו ה-constructor של DynamicActivityNavigator מקבל Context במקום Activity. (aosp/1250252)

תיקוני באגים

  • NavigationUI כבר לא מתעלם מתויות ריקות (כלומר, יעד עם android:label=””), והוא מגדיר עכשיו את הכותרת כמחרוזת ריקה בצורה נכונה. (b/148679860)

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

  • הארטיפקטים של התכונות הדינמיות של הניווט תלויים עכשיו ב-Play Core 1.6.5. (b/149556401)

גרסה 2.3.0-alpha03

4 במרץ 2020

androidx.navigation:navigation-*:2.3.0-alpha03 משוחרר. גרסה 2.3.0-alpha03 מכילה את ההצהרות האלה.

שינויים ב-API

  • במקום להסתמך על המחלקה הקונקרטית DrawerLayout, AppBarConfiguration משתמש עכשיו בממשק Openable שהוצג ב-CustomView 1.1.0-alpha02 (ש-DrawerLayout מטמיע החל מ-DrawerLayout 1.1.0-alpha04), ומאפשר לכם להשתמש בהטמעות מותאמות אישית של Openable עם NavigationUI. (b/129030452)

תיקוני באגים

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

שינויים ביחסי התלות

  • המערכת הניווטית חזרה לשימוש ב-Core 1.2.0, והיא תלויה עכשיו ב-Core 1.1.0 כדי למנוע מהמפתחים לעבור לשימוש ביחסי תלות חדשים יותר, כשהמערכת הניווטית לא תלויה בממשקי 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: כללי ProGuard של navigation-ui עבור DrawerArrowDrawable עודכנו כדי להבטיח ש-android.enableJetifier=true לא נדרש. (b/147610424)
  • מניווט 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)
  • כללי ProGuard של navigation-common-ktx שומרים עכשיו בצורה נכונה רק את הכיתות של 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)

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

גרסה

גרסה

22 בינואר 2020

androidx.navigation:navigation-*:2.2.0 משוחרר. גרסה 2.2.0 כוללת את ההצהרות האלה.

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

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

גרסה 2.2.0-rc04

18 בדצמבר 2019

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

תיקוני באגים

  • שינינו את אנימציות ברירת המחדל של העמעום שבהן משתמש navigation-ui כך שיתאיימו לאנימציות העמעום שהותאמו בקטע 1.2.0-rc04. (b/145769814)

גרסה 2.2.0-rc03

4 בדצמבר 2019

androidx.navigation:navigation-*:2.2.0-rc03 משוחרר. גרסה 2.2.0-rc03 מכילה את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה בניתוח של קישור עומק כשמשתמשים בפרמטרים של שאילתות ובארגומנט כחלק האחרון בנתיב, שגרמה לכך שלא ניתן היה לנתח יותר מתווים אחד של ארגומנט הנתיב הסופי. (b/144554689)
  • תוקנה בעיה בניתוח של קישורי עומק, שבה פרמטרים אופציונליים קיבלו את הערך "@null" במקום null. (b/141613546)
  • NavHostFragment משחזר עכשיו בצורה נכונה את הגרף אחרי שינוי בהגדרות, כשמשתמשים בו עם FragmentContainerView. (b/143752103)

שינויים ביחסי התלות

  • הניווט תלוי עכשיו ב-Lifecycle 2.2.0-rc03, ב-Lifecycle ViewModel 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)
  • תוסף Kotlin ‏navArgs() ב-Activity כולל עכשיו הודעת שגיאה טובה יותר כשאין פריטים נוספים. (b/141408999)
  • כיתות Java מסוג Directions שנוצרו על ידי Safe Args מכילות ערכי ברירת מחדל. (b/141099045)
  • כיתות Java מסוג Args שנוצרו על ידי Safe Args מכילות ערכי ברירת מחדל. (b/140123727)
  • כשמשתמשים ב-Toolbar, ה-NavigationUI כבר לא יוצר אנימציה של שינוי הטקסט כשעוברים בין שני יעדים ברמה העליונה. (b/140848160)

גרסה 2.2.0-alpha03

18 בספטמבר 2019

androidx.navigation:navigation-*:2.2.0-alpha03 משוחרר. גרסה 2.2.0-alpha03 מכילה את ההצהרות האלה.

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

  • אם מחייגים למספר setViewModelStore() אחרי שמחייגים למספר setGraph, מתקבלת עכשיו הודעת IllegalStateException. תמיד צריך להגדיר את זה באמצעות NavHost כחלק מההגדרה הראשונית, כדי לוודא שלכל המכונות של NavBackStackEntry יש אחסון עקבי למכונות של ViewModel. (aosp/1111821)

תיקוני באגים

  • תוקנה בעיה ב-ConcurrentModificationException כשמשתמשים במכונות ViewModel שמצורפות למספר מכונות ViewModelStore שונות ברמת תרשים הניווט. (aosp/1112257)

גרסה 2.2.0-alpha02

5 בספטמבר 2019

androidx.navigation:navigation-*:2.2.0-alpha02 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

  • קישורי עומק עם פרמטרים של שאילתה תומכים עכשיו בפרמטרים של שאילתה בסדר מחדש. ארגומנטים שיש להם ערך ברירת מחדל או שאפשר להקצות להם ערך null הם עכשיו אופציונליים כשמתבצעת התאמה של קישורי עומק. (b/133273839)
  • עכשיו אפשר להפעיל את NavController.getBackStackEntry() ולהעביר את המזהה של יעד או תרשים ניווט בסטאק העורפי. הערך המוחזר של NavBackStackEntry מספק את הערכים LifecycleOwner,‏ ViewModelStoreOwner (הערך שמוחזר על ידי NavController.getViewModelStoreOwner()) ו-SavedStateRegistryOwner שמבוססים על ניווט, בנוסף לארגומנטים ששימשו להפעלת היעד הזה. (aosp/1101691, ‏ aosp/1101710)

תיקוני באגים

  • תוקנה בעיה שבה הוספת NavHostFragment ל-ViewPager2 נכשלה עם IllegalArgumentException. (b/133640271)
  • NavInflater לא קורא עכשיו ל-getResourceName() ללא צורך, וכך מזרז את זמן הניפוח ב-40%. (b/139213740)

גרסה 2.2.0-alpha01

7 באוגוסט 2019

androidx.navigation:navigation-*:2.2.0-alpha01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

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

שינויים ב-API

תיקוני באגים

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

גרסה

גרסה

5 בספטמבר 2019

androidx.navigation:navigation-*:2.1.0 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

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

  • הגדרת היקף של מודלים של ViewModels לתרשים ניווט: עכשיו אפשר ליצור מודלים של ViewModels ברמת התרשים של הניווט באמצעות מנהל הנכסים by navGraphViewModels() למשתמשי Kotlin באמצעות ספריות -ktx או באמצעות ה-API getViewModelStoreOwner() שנוסף ל-NavController. מידע נוסף זמין במאמר שיתוף נתונים שקשורים לממשק המשתמש בין יעדים.
  • יעדים של תיבת דו-שיח: עכשיו אפשר ליצור יעדים מסוג <dialog> שיוצג בהם DialogFragment כשnavigate אליהם. כברירת מחדל, ב-NavHostFragment יש תמיכה ביעדים של תיבת דו-שיח. מידע נוסף זמין במאמר יצירת יעד מ-DialogFragment.
  • ניווט לפי URI: עכשיו אפשר navigate באמצעות Uri, שמשתמש ב-<deepLink> שהוספתם ליעד כדי לנווט אליו. מידע נוסף זמין במאמר ניווט באמצעות Uri.
  • NavHostController: ממשקי API ששימשו במיוחד ליצירת NavHost בהתאמה אישית הועברו אל NavHostController, ומאפשרים להטמעות לחבר את NavController שלהן ל-LifecycleOwner, ל-OnBackPressedDispatcher ול-ViewModelStore המארחים.

גרסה 2.1.0-rc01

7 באוגוסט 2019

androidx.navigation:navigation-*:2.1.0-rc01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

שינויים ב-API

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

גרסה 2.1.0-beta02

19 ביולי 2019

androidx.navigation:*:2.1.0-beta02 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תיקוני באגים

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

גרסה 2.1.0-beta01

17 ביולי 2019

androidx.navigation:*:2.1.0-beta01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

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

תיקוני באגים

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

גרסה 2.1.0-alpha06

2 ביולי 2019

androidx.navigation:*:2.1.0-alpha06 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

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

שינויים ב-API

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

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

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

תיקוני באגים

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

גרסה 2.1.0-alpha05

5 ביוני 2019

androidx.navigation:*:2.1.0-alpha05 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

שינויים ב-API

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

תיקוני באגים

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

גרסה 2.1.0-alpha04

16 במאי 2019

androidx.navigation:*:2.1.0-alpha04 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תיקוני באגים

  • NavHostFragment מתייחס בצורה נכונה ל-app:defaultNavHost כשמצמיד את האירועים של לחצן החזרה אחורה במערכת, וכך מתקן רגרסיה בניווט 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 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

בעיות מוכרות

  • NavHostFragment ממשיך ליירט את לחצן החזרה לדף הקודם של המערכת למרות השימוש ב-app:defaultNavHost="false" b/132077777

תכונות חדשות

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

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

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

שינויים ב-API

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

תיקוני באגים

  • עכשיו הארגומנטים שמוגדרים כברירת מחדל מועברים בצורה נכונה למופעים של OnDestinationChangedListener. b/130630686
  • NavHostFragment עכשיו מיירט אירועי Back במערכת באמצעות OnBackPressedDispatcher, וכך מתקן בעיה בביצוע ניווט מותנה בשיטות מחזור החיים של Fragment כשחוזרים ל-Fragment. b/111598096
  • ב-Safe Args, עכשיו אפשר להסיק בצורה נכונה ש-android:defaultValue=”@null” עם app:argType לא מוגדר הוא ארגומנט string. b/129629192

גרסה 2.1.0-alpha02

3 באפריל 2019

androidx.navigation:*:2.1.0-alpha02 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

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

שינויים ב-API

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

תיקוני באגים

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

גרסה 2.1.0-alpha01

19 במרץ 2019

זוהי הגרסה הראשונה של Navigation 2.1.0 בגרסה אלפא.

שינויים ביחסי התלות

  • הניווט תלוי עכשיו ב-androidx.core:core:1.0.1 וב-androidx.fragment:fragment:1.1.0-alpha05. בנוסף, במהדורה הזו הוסרה התלות ב-androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

שינויים ב-API

  • הוספנו שיטה חדשה Navigation.createNavigateOnClickListener(NavDirections) כחלופה ליצירת מאזין קליקים עם מזהה משאב ו-Bundle.‏b/127631752
  • האפשרות FragmentNavigator.instantiateFragment הוצאה משימוש. בהטמעת ברירת המחדל נעשה עכשיו שימוש ב-FragmentFactory כדי ליצור אובייקטים של Fragments.‏ b/119054429

תיקוני באגים

  • תוקנה בעיה בשימוש ב-android:defaultValue="@null": מערכת הניווט לא שולחת יותר ערך null של Bundle כשיש ארגומנטים שמצורפים ליעד. 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. Navigation 1.0 יציבה תהיה הגרסה האחרונה שתשתמש ביחסי התלות של Support Library. כל הפיתוח העתידי אחרי 1.0 יתבסס על AndroidX וייבנה על גרסת 2.0 היציבה.

יחסי תלות מהתקופה שלפני AndroidX

בגרסאות של Navigation שקדמו ל-AndroidX, צריך לכלול את יחסי התלות הבאים:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

ל-Safe args, מוסיפים את classpath הבא בקובץ build.gradle ברמה העליונה

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

גרסה 1.0.0

גרסה 1.0.0

14 במרץ 2019

גרסת 1.0.0 של הניווט פורסמת ללא שינויים מ-1.0.0-rc02.

גרסה 1.0.0-rc02

26 בפברואר 2019

זוהי הגרסה המועמדת השנייה לגרסה היציבה 1.0.0 של Navigation. הגרסה הזו כוללת מספר תיקוני באגים.

תיקוני באגים

  • תוקנה בעיה שבה popBackStack() היה מתעלם אם לתרשים הבסיס לא היה מזהה b/126251695
  • navigateUp() מטפל עכשיו בצורה נכונה בניווט חזרה למשימה של האפליקציה כשמפעילים אותו אחרי טיפול בקישורי עומק בלי FLAG_ACTIVITY_NEW_TASK b/126082008
  • תוקנה בעיה ב-ActivityNavigator.applyPopAnimationsToPendingTransition שלא חלה עליה אנימציית היציאה הנכונה של חלון קופץ b/126237567
  • קוד Kotlin שנוצר על ידי Safe Args עכשיו כולל בריחה נכונה של מילות מפתח ב-Kotlin, כמו in ו-fun, בשם החבילה שמשויך לכיתה R. b/126020455

גרסה 1.0.0-rc01

21 בפברואר 2019

זוהי גרסה מועמדת להפצה של הגרסה היציבה 1.0.0 של Navigation. הגרסה הזו כוללת תיקון באג אחד.

תיקוני באגים

  • תוקנה בעיה בשימוש ב-Fragments ובפעולות ניווט מסוג singleTop b/124294805

גרסה 1.0.0-beta02

12 בפברואר 2019

הגרסה הזו כוללת מספר שיפורים קלים ותיקוני באגים חשובים.

תכונות חדשות

  • עכשיו אפשר להשתמש ב-0 כ-android:defaultValue לארגומנטים של reference. b/124248602

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

  • התאמות מדויקות של קישורי עומק מקבלות עכשיו עדיפות על פני קישורי עומק עם התאמות של .* או של ארגומנטים. b/123969518

תיקוני באגים

  • הפונקציות popBackStack() ו-navigateUp מחזירות עכשיו את הערך false בצורה נכונה כשמבצעים pop של היעד האחרון ב-back stack, וכך מתקנים נסיגה לאחור שהופיעה ב-1.0.0-beta01. b/123933201
  • הניווט מגדיר עכשיו את ClassLoader בצורה נכונה במהלך שחזור המצב של המכונה השמורה, וכך נמנעות בעיות בשימוש בקטגוריות בהתאמה אישית במצב השמור של Navigator או בארגומנטים שנשלחים ל-NavDestination. b/123893858
  • כיתות NavArgs שנוצרו על ידי Safe Args לא קורסות יותר כשמשחזרים את הארגומנט Parcelable[] ממצב המכונה השמור. b/123963545
  • Safe Args מנקה עכשיו כראוי כיתות Kotlin שנוצרו שלא נחוצות. b/124120883

גרסה 1.0.0-beta01

4 בפברואר 2019

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

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

  • הניווט מבטיח עכשיו שערכים שמוגדרים כברירת מחדל לארגומנטים יטופלו באופן זהה במהלך זמן הריצה ודרך Safe Args. כתוצאה מכך, רק לארגומנטים עם app:argType="reference" יכול להיות ערך ברירת מחדל שמצביע למשאב אחר (לדוגמה, @color/colorPrimary). ניסיון להשתמש בערך ברירת מחדל של הפניה עם app:argType שונה יוביל לחריגה בזמן ניתוח ה-XML של הניווט. b/123551990
  • Safe Args תלוי עכשיו בפלאגין Android Gradle 3.3.0 aosp/888413
  • Safe Args תלוי עכשיו ב-Kotlin 1.3.20 aosp/888414

תיקוני באגים

  • מעכשיו אפשר להשתמש ב-Safe Args בספריות ובמודולים של תכונות בכל הגרסאות של הפלאגין של Android Gradle. b/121304903
  • תוקנה נסיגה שגרמה לכך שפעולת popBackStack() אחת תגרום להוצאה של כל העותק של יעד מסוים מהחלק העליון של סטאק החזרה, במקום רק יעד אחד בכל פעם. b/123552990
  • תוקנה בעיה שבה המצב של FragmentNavigator לא היה מסתנכרן עם המצב של NavController, וכתוצאה מכך נוצר IllegalStateException כשמנסים לשחזר את סטאק הקוד הקודם. b/123803044
  • תוקנה בעיה שבה החץ לאחור עם הידית NavigationUI לא הופיע כשמשתמשים ב-ProGuard עם ערפול. b/123449431
  • הקוד שנוצר על ידי Safe Args מטפל עכשיו כראוי בשימוש ב-app:argType שמפנה לכיתה פנימית סטטית בפורמט .OuterClass$InnerClass. b/123736741
  • קוד Java שנוצר על ידי Safe Args מטפל עכשיו כראוי בפעולות גלובליות וביעדים שמוטמעים לעומק. b/123347762

גרסה 1.0.0-alpha11

23 בינואר 2019

זוהי גרסה של תיקון חם ל-1.0.0-alpha10 שמתקנת בעיה ב-Safe Args.

תיקוני באגים

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

גרסה 1.0.0-alpha10

23 בינואר 2019

בעיות מוכרות

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

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

תכונות חדשות

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

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

  • קישורי עומק תואמים מוטים עכשיו לקישור העומק שיש לו את הכי הרבה ארגומנטים תואמים. b/118393029
  • מעכשיו, קריאה ל-setGraph() ב-NavController תאפס את סטאק החזרה. b/111450672
  • קישורי עומק לא מוכרים כבר לא גורמים להצגת הודעת השגיאה IllegalStateException, אלא מתעלמים מהם. כך מתוקנות בעיות שקשורות ל-NavHostFragment בתצוגת עץ או ל-NavHostFragment מרובים. b/121340440

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

  • השיטה NavOptions.applyPopAnimationsToPendingTransition() להוספת אנימציות קופצות לפעילות הועברה ל-ActivityNavigator. b/122413117
  • Safe Args עכשיו מונע כפילויות של כיתות זהות לפעולות ללא ארגומנטים. סוג ההחזרה של שיטות ללא ארגומנטים בקטגוריות NavDirections שנוצרו הוא עכשיו NavDirections. b/123233147
  • לכיתות Directions שנוצרו באמצעות Safe Args אין יותר קונסטרוקטור ציבורי – צריך לבצע אינטראקציה רק עם השיטות הסטטיות שנוצרו. b/123031660
  • לכיתות NavDirections שנוצרו על ידי Safe Args כבר אין קונסטרוקטור ציבורי – צריך ליצור אותן רק באמצעות השיטות הסטטיות בכיתות Directions שנוצרו. b/122963206
  • הערך Bundle שהוחזר מ-NavDirections' getArguments() מסומן עכשיו בתור @NonNull במקום @Nullable. b/123243957

תיקוני באגים

  • NavDeepLinkBuilder מטפל עכשיו בצורה נכונה בכמה קריאות PendingIntent בו-זמנית לאותו יעד, באמצעות הארגומנטים שאתם מעבירים כדי לקבוע את הייחודיות. b/120042732
  • NavController מטפל עכשיו כראוי בפעולות popBackStack() כשמשתמשים ב-NavHostFragment בתצוגת עץ או ב-Fragments צאצאים אחרים עם סטאק אחורה. b/122770335
  • NavigationUI מגדיר עכשיו בצורה נכונה את תיאור התוכן של לחצן למעלה. b/120395362
  • שיעורי הדרכה שנוצרו באמצעות Safe Args מטפלים עכשיו בצורה נכונה בפעולות גלובליות שיש להן את אותו מזהה כמו פעולה ביעד. b/122962504
  • לכיתות NavDirections שנוצרו על ידי Safe Args יש עכשיו ערכים שווים של hashCode() כאשר equals() מחזירה את הערך true. b/123043662
  • FragmentNavigator מחזירה עכשיו הודעת שגיאה טובה יותר אם מנסים לבצע FragmentTransactions בהתאמה אישית ב-FragmentManager של NavHostFragment. תמיד צריך להשתמש ב-getChildFragmentManager(). b/112927148

גרסה 1.0.0-alpha09

18 בדצמבר 2018

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

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

תכונות חדשות

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

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

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

תיקוני באגים

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

גרסה 1.0.0-alpha08

6 בדצמבר 2018

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

תכונות חדשות

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

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

  • השם של OnNavigatedListener השתנה ל-OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener מעביר עכשיו גם את Bundle של הארגומנטים aosp/837142
  • המאפיינים app:clearTask ו-app:launchDocument והשיטות המשויכות שלהם הוסרו. משתמשים ב-app:popUpTo עם שורש התרשים כדי להסיר את כל היעדים מסטאק העורפי. b/119628354
  • ActivityNavigator.Extras משתמש עכשיו בתבנית Builder ומוסיף את היכולת להגדיר את כל הדגלים של Intent.FLAG_ACTIVITY_ aosp/828140
  • השם של NavController.onHandleDeepLink שונה ל-handleDeepLink aosp/836063
  • שיעורים ומתודות רבים שלא מיועדים ליצירת תת-סוגים, כמו NavOptions,‏ NavInflater,‏ NavDeepLinkBuilder ו-AppBarConfiguration, הפכו ל-final aosp/835681
  • השיטה NavHostFragment.setGraph() הוצאה משימוש aosp/835684
  • השיטה NavigationUI.navigateUp(DrawerLayout, NavController) הוצאה משימוש והוסרה. aosp/835684
  • יצירת קטעי קוד הועברה אל FragmentNavigator, כך שקל יותר להעניק גישה ליצירת קטעי קוד ל-FragmentFactory. b/119054429
  • ה-constructor של NavGraphNavigator לא מקבל יותר Context aosp/835340
  • NavigatorProvider היא עכשיו מחלקה ולא ממשק. הפונקציה NavigatorProvider שמוחזרת על ידי getNavigatorProvider() לא השתנתה. aosp/830660
  • NavDestination.navigate() הוסר. במקום זאת, צריך להתקשר למספר navigate() ב-Navigator. aosp/830663
  • שיפור משמעותי של Navigator, ביטול הצורך ב-OnNavigatorNavigatedListener ושינוי navigate כך שיחזיר את ה-NavDestination שאליו מנווטים.
  • מכונות Navigator לא יכולות יותר לשלוח אירועי קופץ ל-NavController. מומלץ להשתמש ב-OnBackPressedCallback כדי ליירט לחיצות על הלחצן 'הקודם' ולבצע קריאה ל-navController.popBackStack(). aosp/833716

תיקוני באגים

  • popUpTo פועל עכשיו באופן עקבי כשהיעד הוא רכיב <navigation> b/116831650
  • תוקנו מספר באגים שגרמו לשגיאה IllegalArgumentException כשמשתמשים בגרפים בתצוגת עץ b/118713731 b/113611083 b/113346925 b/113305559
  • מאפיין dataPattern של יעדים מסוג <activity> יאכלס עכשיו ארגומנטים מארגומנטים שאינם מחרוזות באמצעות קריאה ל-toString() b/120161365

Safe Args

  • Safe Args תומך באובייקטים מסוג Serializable, כולל ערכי Enum. אפשר להגדיר ערך ברירת מחדל לסוגי enum באמצעות ליצ'ר של enum ללא שם הכיתה (למשל app:defaultValue="READ") b/111316353
  • Safe Args תומך במערכים של כל הסוגים הנתמכים b/111487504
  • Safe Args מתעלם עכשיו מתיקיות משנה של ספריות משאבים b/117893516
  • Safe Args מוסיף הערות @Override במקרים הרלוונטיים b/117145301

גרסה 1.0.0-alpha07

29 באוקטובר 2018

תכונות חדשות

  • הכיתה החדשה AppBarConfiguration מאפשרת לכם להתאים אישית את היעדים שנחשבים ליעדים ברמה העליונה. פרטים נוספים זמינים במסמכי התיעוד המעודכנים. b/117333663
  • עכשיו אפשר להעביר ארגומנטים ליעד ההתחלה של התרשים b/110300470
  • עכשיו אפשר להשתמש בסכימות בהתאמה אישית עם נקודות, מקפים וסמלי פלוס בקישורי עומק. b/112806402

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

  • המודול navigation-testing-ktx צורף למודול navigation-testing artifact ולא יפורסם יותר.
  • לארטיפקט navigation-testing יש עכשיו תלות בספרייה הרגילה של Kotlin. ה-API השתנה כדי להתאים יותר למוסכמות של Kotlin, אבל אפשר להמשיך להשתמש בו לבדיקות שנכתבות ב-Java.
  • אין יותר תמיכה בתרשים ניווט רשום במניפסט של מטא-נתונים. b/118355937
  • לא ניתן יותר לצרף פעולות ליעדי <activity>. aosp/785539

תיקוני באגים

  • קישורי עומק מפענחים עכשיו בצורה נכונה את פרמטרים של שאילתות. b/110057514
  • עכשיו כל האנימציות של הכניסה והיציאה חלות בצורה נכונה על יעדים של פעילויות. b/117145284
  • תוקנה קריסה שמתרחשת אחרי שינויים בתצורה כשמשתמשים ב-Navigators מותאמים אישית. b/110763345

Safe Args

  • עכשיו יש ל-Safe args תלות קבועה ב-Android Gradle Plugin 3.2.1. b/113167627
  • עכשיו אפשר ליצור מסלולי הגעה לכיתות פנימיות. b/117407555
  • תוקנה בעיה ביצירת מסלול לגרף <include>. b/116542123

גרסה 1.0.0-alpha06

20 בספטמבר 2018

תכונות חדשות

שינויים ב-API

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

תיקוני באגים

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

Safe Args

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

גרסה 1.0.0-alpha05

10 באוגוסט 2018

תיקוני באגים

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

גרסה 1.0.0-alpha04

19 ביולי 2018

התכונה Navigation 1.0.0-alpha04 והפלאגין המשויך של Safe Args ל-Gradle מכילים מספר שינויים ב-API, שינויים בהתנהגות ותיקוני באגים.

שינויים ב-API או בהתנהגות

  • ‏NavHostFragment תמיד מגדיר את ה-Fragment הנוכחי כ-Fragment הניווט הראשי, כדי לוודא שמנהלי ה-Fragment הצאצאים יופעלו לפני שה-NavController החיצוני יופעל b/111345778

Safe Args

  • שינוי תוכנה שעלול לגרום לכשלים: השם app:type השתנה ל-app:argType כדי למנוע התנגשויות עם ספריות אחרות, כמו ConstraintLayout 2.0.0-alpha1 b/111110548
  • עכשיו אפשר ללחוץ על הודעות השגיאה מ-Safe Args b/111534438
  • בכיתות Args מוודאים עכשיו שמאפייני NonNull הם לא null b/111451769
  • נוספו הערות NonNull לכיתות שנוצרו על ידי NavDirections ו-Args‏ b/111455455 b/111455456

תיקוני באגים

  • תוקנה בעיה בלחצן 'הקודם' במערכת אחרי קישור עמוק ליעד של קטע קוד b/111515685

גרסה 1.0.0-alpha03

12 ביולי 2018

התכונה Navigation 1.0.0-alpha03 והפלאגין המשויך של Safe Args ל-Gradle מכילים מספר שינויים ב-API, שינויים בהתנהגות ותיקוני באגים.

שינויים ב-API או בהתנהגות

  • נוספה שיטת NavigationUI.setupWithNavController לסרגל הכלים b/109868820
  • נוספה שיטת NavigationUI.setupWithNavController ל-CollapsingToolbarLayout b/110887183
  • הפונקציה popBackStack() מחזירה עכשיו את הערך false כשמקבץ ההיסטוריה הריק או כשמזהה היעד שצוין לא נמצא במקבץ ההיסטוריה b/110893637
  • ‏FragmentNavigator מתעלם עכשיו מפעולות ניווט אחרי ש-FragmentManager שומר את המצב, כדי למנוע חריגות מסוג 'לא ניתן לבצע את הפעולה הזו אחרי onSaveInstanceState' b/110987825

Safe Args

  • שינוי שגורם לשבירה של תאימות לגרסאות קודמות: תווים לא אלפאנומריים בשמות של פעולות ושל ארגומנטים יוחלפו באותיות רישיות באותיות רישיות קטנות בשמות השיטות הרלוונטיות של NavDirections
    • לדוגמה, DemoController.index יהפוך ל-setDemoControllerIndex b/79995048
    • לדוגמה, action_show_settings יהפוך ל-actionShowSettings b/79642240
  • שינוי שפוגע בתאימות לאחור: עכשיו, הארגומנטים נחשבים כערכים שאינם null כברירת מחדל. כדי לאפשר ערכי null בארגומנטים מסוג מחרוזת ו-Parcelable, מוסיפים את app:nullable="true" b/79642307
  • עכשיו אפשר להשתמש ב-app:type="long" עם ערכי ברירת מחדל בפורמט '123L' b/79563966
  • מעכשיו יש תמיכה בארגומנטים של Parcelable, באמצעות שם מחלקה מלא ל-app:type. ערך ברירת המחדל היחיד שנתמך הוא "@null" b/79563966
  • מעכשיו, כיתות Args מיישמות את equals() ו-hashCode() b/79642246
  • מעכשיו אפשר להחיל את הפלאגין Safe Args על פרויקטים של ספריות b/80036553
  • עכשיו אפשר להחיל את הפלאגין Safe Args על פרויקטים של תכונות b/110011752

תיקוני באגים

  • תוקנו בעיות בניווט במהלך שיטות מחזור החיים של Fragment‏ b/109916080
  • תוקנו בעיות בניווט בגרפים בתצוגת עץ כמה פעמים b/110178671
  • תוקנו בעיות שקשורות לשימוש ב-setPopUpTo עם היעד הראשון בתרשים b/109909461
  • תוקנה בעיה שבה כל הערכים של app:defaultValue הועברו כמחרוזות b/110710788
  • aapt2 שצורף לפלאגין Android Gradle 3.2 Beta 01 מוסיף עכשיו כללי שמירה לכל מאפיין android:name בקובצי XML של ניווט b/79874119
  • תוקנה דליפת זיכרון בהחלפת FragmentNavigator שמוגדר כברירת מחדל b/110900142

גרסה 1.0.0-alpha02

7 ביוני 2018

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

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

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

תיקוני באגים

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

  • הניווט תלוי עכשיו בספריית התמיכה 27.1.1 כדי לתקן את האירועים של הבהוב בזמן השימוש באנימציות. b/80160903

  • תוקן באג ב-IllegalArgumentException כשמשתמשים ב-defaultNavHost="true" כקטע צאצא. b/79656847

  • תוקן באג ב-StackOverflowError במהלך שימוש ב-NavDeepLinkBuilder. b/109653065

  • תוקן באג ב-IllegalArgumentException כשמנווטים חזרה לתרשים בתצוגת עץ. b/80453447

  • תוקנה בעיה עם קטעי Fragment חופפים בזמן השימוש ב-launchSingleTop. b/79407969

  • מערכת הניווט יוצרת עכשיו את סטאק החזרה הסינתטי הנכון לתרשים בתצוגת עץ. b/79734195

  • מעכשיו, NavigationUI תדגיש את הפריט הנכון כשמשתמשים בגרף בתצוגת עץ כ-MenuItem. b/109675998

שינויים ב-API

  • המאפיין clearTask של פעולות וממשק ה-API המשויך ב-NavOptions הוצאו משימוש. b/80338878

  • המאפיין launchDocument של פעולות וממשק ה-API המשויך ב-NavOptions הוצאו משימוש. b/109806636

גרסה 1.0.0-alpha01

8 במאי 2018

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