Safe Args

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

הפעלת ארגומנטים בטוחים

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

Groovy

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

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.1"
        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

הקוד שנוצר

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

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

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

דוגמה לארגומנטים בטוחים

לדוגמה, נבחן תרשים ניווט עם פעולה אחת שמחברת בין יעדים, 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 כדי לשמור על בטיחות הסוג

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

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

Groovy

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

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.1"
        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

אחרי שמפעילים את Safe Args, הפלאגין יוצר קוד שמכיל מחלקות ו- שיטות לכל פעולה שהגדרתם. לכל פעולה, גם Safe Args יוצרת מחלקה לכל יעד מקור, שהוא היעד שממנו בוצעה הפעולה. שם הכיתה שנוצר הוא שילוב של שם מחלקת היעד והמילה "Directions". לדוגמה, אם היעד הוא 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, אפשר לעיין במאמר שימוש בארגומנטים בטוחים כדי להעביר נתונים עם אבטחת סוג בנתוני מעבר בין יעדים.