ניווט

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

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

מושגים מרכזיים

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

קונספט

מטרה

סוג

מארח

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

תרשים

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

NavGraph

שלט רחוק

המתאם המרכזי לניהול הניווט בין יעדים. הבקר כולל שיטות לניווט בין יעדים, לטיפול בקישורי עומק, לניהול של מקבץ פעילויות קודמות (back stack) ועוד.

NavController

יעד

צומת בגרף הניווט. כשהמשתמש מנווט לצומת הזה, המארח מציג את התוכן שלו.

NavDestination

בדרך כלל נוצר כשמגדירים את גרף הניווט.

נתיב

מזהה ייחודי של יעד וכל הנתונים שנדרשים לו.

אפשר לנווט באמצעות מסלולים. מסלולים מובילים ליעדים.

כל סוג נתונים שניתן לסדר אותו.

יתרונות ותכונות

רכיב הניווט מספק מספר יתרונות ותכונות נוספים, כולל:

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

אפשרויות של מסגרת

רכיב הניווט תומך בשתי מסגרות עיקריות להטמעה של גרף הניווט, בהתאם לארכיטקטורת ממשק המשתמש של האפליקציה:

  • Compose: אם האפליקציה שלכם מבוססת לחלוטין על Jetpack Compose, צריך להשתמש ב-Navigation Compose. היעדים בתרשים הם רכיבים שאפשר להרכיב.
  • מקטעים (fragments): אם האפליקציה שלכם משתמשת ב-Views או בשילוב של Views ופיתוח נייטיב, צריך להשתמש ברכיב Navigation מבוסס-מקטע (fragment). יעדים בתרשים הם קטעים שיכולים לארח רכיבי View רגילים, תוכן Compose או שילוב של שניהם.

באפליקציות שעוברות מ-Views ל-Compose, האסטרטגיה המומלצת היא להמשיך להשתמש ברכיב הניווט מבוסס-מקטע (fragment) בזמן שממירים מסכים בודדים ל-Compose. אחרי שמחליפים את כל המקטעים (fragments) ברכיבי Composable, אפשר להעביר את גרף הניווט אל Navigation Compose.

הגדרת הסביבה

כדי לכלול תמיכה בניווט בפרויקט, מוסיפים את יחסי התלות הבאים לקובץ 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.9.8"

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

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

במאמר הוספת רכיבים לפרויקט מוסבר איך מוסיפים רכיבים אחרים של ארכיטקטורה לפרויקט.

השלבים הבאים

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

מדריכים מפורטים

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

Codelabs

סרטונים

דוגמאות