Safe Args

הדרך המומלצת לנווט בין יעדים היא באמצעות התוסף Safe Args Gradle. התוסף הזה יוצר אובייקטים ומחלקות builder שמאפשרים ניווט בטוח בין יעדים. אפשר להשתמש ב-Safe Args כדי לנווט ולהעביר נתונים בין יעדים.

הפעלת Safe Args

כדי להוסיף את Safe Args לפרויקט, מוסיפים את classpath הבא לקובץ build.gradle ברמה העליונה:

Groovy

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

Kotlin

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

בנוסף, צריך להחיל אחד משני התוספים הזמינים.

כדי ליצור קוד בשפת Java שמתאים למודולים של Java או למודולים משולבים של Java ו-Kotlin, מוסיפים את השורה הזו לקובץ 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")
}

צריך להוסיף את android.useAndroidX=true לקובץ gradle.properties בהתאם להוראות במאמר מעבר ל-AndroidX.

קוד שנוצר

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

‫Safe Args יוצר מחלקה לכל יעד שממנו מתבצעת פעולה. שם הכיתה שנוצר מוסיף את המילה Directions לשם כיתת היעד המקורית. לדוגמה, אם יעד המקור נקרא SpecifyAmountFragment, המחלקה שנוצרת נקראת SpecifyAmountFragmentDirections.

המחלקות שנוצרות מכילות שיטה סטטית לכל פעולה שמוגדרת ביעד המקורי. השיטה הזו מקבלת את כל פרמטרי הפעולה המוגדרים כארגומנטים ומחזירה אובייקט NavDirections שאפשר להעביר ישירות אל navigate().

דוגמה ל-Safe Args

לדוגמה, נניח שיש גרף ניווט עם פעולה אחת שמקשרת בין שני יעדים, SpecifyAmountFragment ו-ConfirmationFragment. התג ConfirmationFragment מקבל פרמטר יחיד float שאתם מספקים כחלק מהפעולה.

‫Safe Args יוצר מחלקה SpecifyAmountFragmentDirections עם שיטה אחת, actionSpecifyAmountFragmentToConfirmationFragment(), ומחלקה פנימית בשם ActionSpecifyAmountFragmentToConfirmationFragment. המחלקות הפנימיות נגזרות מ-NavDirections ומאחסנות את מזהה הפעולה המשויך ואת הפרמטר float. אפשר להעביר את האובייקט NavDirections שמוחזר ישירות אל navigate(), כמו בדוגמה הבאה:

Kotlin

override fun onClick(v: View) {
    val amount: Float = ...
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount)
    v.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    float amount = ...;
    action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount);
    Navigation.findNavController(view).navigate(action);
}

מידע נוסף על העברת נתונים בין יעדים באמצעות Safe Args זמין במאמר בנושא שימוש ב-Safe Args להעברת נתונים עם מניעת שגיאות הקלדה.

שימוש ב-Safe Args כדי למנוע שגיאות הקלדה

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

כדי להוסיף את Safe Args לפרויקט, מוסיפים את classpath הבא לקובץ build.gradle ברמה העליונה:

Groovy

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

Kotlin

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

בנוסף, צריך להחיל אחד משני התוספים הזמינים.

כדי ליצור קוד בשפת Java שמתאים למודולים של Java או למודולים משולבים של Java ו-Kotlin, מוסיפים את השורה הזו לקובץ 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")
}

צריך להוסיף את android.useAndroidX=true לקובץ gradle.properties בהתאם להוראות במאמר מעבר ל-AndroidX.

אחרי שמפעילים את Safe Args, הפלאגין יוצר קוד שמכיל מחלקות ושיטות לכל פעולה שהגדרתם. לכל פעולה, Safe Args גם יוצר מחלקה לכל יעד מקורי, שהוא היעד שממנו הפעולה מתחילה. שם הכיתה שנוצר הוא שילוב של שם הכיתה המקורית של היעד והמילה 'הוראות'. לדוגמה, אם שם היעד הוא SpecifyAmountFragment, שם המחלקה שנוצרת הוא SpecifyAmountFragmentDirections. המחלקות שנוצרות מכילות שיטה סטטית לכל פעולה שמוגדרת ביעד המקורי. השיטה הזו מקבלת כארגומנטים את כל הפרמטרים המוגדרים של הפעולה ומחזירה אובייקט NavDirections שאפשר להעביר ל-navigate().

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

‫Safe Args יוצר מחלקה SpecifyAmountFragmentDirections עם שיטה אחת, actionSpecifyAmountFragmentToConfirmationFragment(), שמחזירה אובייקט NavDirections. אפשר להעביר את אובייקט NavDirections שמוחזר ישירות אל navigate(), כמו בדוגמה הבאה:

Kotlin

override fun onClick(view: View) {
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment()
    view.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    NavDirections action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment();
    Navigation.findNavController(view).navigate(action);
}

מידע נוסף על העברת נתונים בין יעדים באמצעות Safe Args זמין במאמר שימוש ב-Safe Args להעברת נתונים עם מניעת שגיאות הקלדה, בקטע העברת נתונים בין יעדים.