ارگ ایمن

روش پیشنهادی برای پیمایش بین مقصدها استفاده از افزونه Safe Args Gradle است. این پلاگین کلاس های شی و سازنده ایجاد می کند که ناوبری ایمن بین مقصدها را امکان پذیر می کند. از Safe Args برای پیمایش و انتقال داده ها بین مقصدها استفاده کنید.

Safe Args را فعال کنید

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

Groovy

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

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.0"
        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() ارسال کنید.

مثال Safe Args

برای مثال، یک نمودار ناوبری را با یک عمل در نظر بگیرید که دو مقصد، SpecifyAmountFragment و ConfirmationFragment را به هم متصل می کند. ConfirmationFragment یک پارامتر float واحد را می گیرد که شما به عنوان بخشی از عمل ارائه می دهید.

Safe Args یک کلاس SpecifyAmountFragmentDirections با یک متد، actionSpecifyAmountFragmentToConfirmationFragment() و یک کلاس داخلی به نام ActionSpecifyAmountFragmentToConfirmationFragment تولید می کند. کلاس داخلی از NavDirections مشتق شده است و شناسه عمل مرتبط و پارامتر float را ذخیره می کند. همانطور که در مثال زیر نشان داده شده است، شیء NavDirections بازگشتی می‌تواند مستقیماً به navigate() ارسال شود:

کاتلین

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

جاوا

@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 بین مقصدها حرکت کنید. این پلاگین کلاس های شی و سازنده ساده ای تولید می کند که ناوبری ایمن و انتقال آرگومان بین مقصد را امکان پذیر می کند.

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

Groovy

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

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.0"
        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() ارسال شود، همانطور که در مثال زیر نشان داده شده است:

کاتلین

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

جاوا

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

برای اطلاعات بیشتر در مورد انتقال داده ها بین مقصدها با Safe Args، به استفاده از Safe Args برای ارسال داده با نوع ایمنی در Pass data بین مقصدها مراجعه کنید.