תמיכה בריבוי מקבצים

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

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

הטמעת תמיכה באופן אוטומטי באמצעות NavigationUI

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

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

הטמעת תמיכה באופן ידני באמצעות ממשקי API בסיסיים

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

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

אפשר להשתמש במאפיינים האלה כדי לתמוך בכמה מקבצים. כאשר מתבצע ניווט צריך להעביר את המשתמש ממקבץ אחד לאחר, להגדיר את שתי האפשרויות app:popUpToSaveState ו-app:restoreState עד true בהתאמה רכיב <action>. כך הפעולה שומרת את המצב של יקובצו יחד וגם לשחזר את המצב של היעד שנשמר בעבר. סטאק, אם יש.

בדוגמה הבאה מוצגת פעולה שמשתמשת בשני המאפיינים האלה:

<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 מאפשר להעביר אפשרויות ניווט מיוחדות כדי לשמור ולשחזר מקבצים כשמנווטים באמצעות NavController. הדבר נכון בין אם אתה יוצר של NavOptions באמצעות Kotlin DSL או באמצעות NavOptions.Builder:

Kotlin

// Use the navigate() method that takes a navOptions DSL Builder
navController.navigate(selectedBottomNavRoute) {
  launchSingleTop = true
  restoreState = true
  popUpTo(navController.graph.findStartDestination().id) {
    saveState = true
  }
}

Java

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);

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

מקורות מידע נוספים

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

פוסטים בבלוגים

דוגמיות