ניווט מתייחס לאינטראקציות שמאפשרות למשתמשים לנווט בין קטעי התוכן השונים באפליקציה, להיכנס אליהם ולצאת מהם.
רכיב הניווט של Android Jetpack כולל את ספריית הניווט, את הפלאגין Safe Args Gradle ואת כלי הפיתוח שיעזרו לכם להטמיע ניווט באפליקציה. רכיב הניווט מטפל במגוון תרחישי שימוש בניווט, מקליקים פשוטים על לחצנים ועד לתבניות מורכבות יותר, כמו סרגלי אפליקציות וחלונית הזזה לניווט.
מושגים מרכזיים
בטבלה הבאה מופיע סקירה כללית של המושגים העיקריים בניווט ושל הסוגים העיקריים שמשמשים להטמעה שלהם.
קונספט |
מטרה |
סוג |
|---|---|---|
מארח |
רכיב בממשק המשתמש שמכיל את יעד הניווט הנוכחי. כלומר, כשמשתמש עובר בין מסכים באפליקציה, האפליקציה מחליפה את היעדים בתוך מארח הניווט. |
|
תרשים |
מבנה נתונים שמגדיר את כל יעדי הניווט באפליקציה ואת הקשר ביניהם. |
|
שלט רחוק |
המתאם המרכזי לניהול הניווט בין יעדים. הבקר כולל שיטות לניווט בין יעדים, לטיפול בקישורי עומק, לניהול של מקבץ פעילויות קודמות (back stack) ועוד. |
|
יעד |
צומת בגרף הניווט. כשהמשתמש מנווט לצומת הזה, המארח מציג את התוכן שלו. |
בדרך כלל נוצר כשמגדירים את גרף הניווט. |
נתיב |
מזהה ייחודי של יעד וכל הנתונים שנדרשים לו. אפשר לנווט באמצעות מסלולים. מסלולים מובילים ליעדים. |
כל סוג נתונים שניתן לסדר אותו. |
יתרונות ותכונות
רכיב הניווט מספק מספר יתרונות ותכונות נוספים, כולל:
- אנימציות ומעברים: מספק משאבים סטנדרטיים לאנימציות ולמעברים.
- קישורי עומק: הטמעה וטיפול בקישורי עומק שמעבירים את המשתמש ישירות ליעד.
- תבניות עיצוב של ממשק משתמש: תומך בתבניות כמו חלוניות הזזה לניווט וניווט תחתון, עם מינימום עבודה נוספת.
- בטיחות סוגים: כולל תמיכה בהעברת נתונים בין יעדים עם בטיחות סוגים.
- תמיכה ב-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 ומסגרות אחרות של ממשקי משתמש, מופיע במדריכים הבאים:
- יצירת בקר ניווט: הסבר על יצירת
NavController. - יצירת גרף ניווט: הסבר על יצירת מארח ניווט וגרף ניווט.
- ניווט ליעד: הסבר על השימוש ב-
NavControllerכדי לעבור בין היעדים בתרשים.
Codelabs
- מידע על Jetpack Navigation
- מקטעים (fragments) ורכיב הניווט
- איך יוצרים אפליקציה מותאמת עם ניווט דינמי
סרטונים
- ניווט בניווט
- 10 שיטות מומלצות למעבר לפעילות יחידה
- פעילות אחת: למה, מתי ואיך (מפגש של מפתחי Android 2018)
- Android Jetpack: ניהול ניווט בממשק המשתמש באמצעות בקר ניווט (Google I/O 2018)