روش پیشنهادی برای پیمایش بین مقصدها استفاده از افزونه Safe Args Gradle است. این پلاگین کلاس های شی و سازنده ایجاد می کند که ناوبری ایمن بین مقصدها را امکان پذیر می کند. از Safe Args برای پیمایش و انتقال داده ها بین مقصدها استفاده کنید.
Safe Args را فعال کنید
برای افزودن Safe Args به پروژه خود، classpath
زیر را در فایل build.gradle
سطح بالای خود قرار دهید:
شیار
buildscript { repositories { google() } dependencies { def nav_version = "2.8.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
کاتلین
buildscript { repositories { google() } dependencies { val nav_version = "2.8.1" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
همچنین باید یکی از دو افزونه موجود را اعمال کنید.
برای ایجاد کد زبان جاوا مناسب برای جاوا یا ماژول های ترکیبی جاوا و کاتلین، این خط را به فایل build.gradle
برنامه یا ماژول خود اضافه کنید:
شیار
plugins { id 'androidx.navigation.safeargs' }
کاتلین
plugins { id("androidx.navigation.safeargs") }
از طرف دیگر، برای تولید کد Kotlin مناسب برای ماژول های فقط Kotlin اضافه کنید:
شیار
plugins { id 'androidx.navigation.safeargs.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()
ارسال شود:
کاتلین
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 به پروژه خود، classpath
زیر را در فایل build.gradle
سطح بالای خود قرار دهید:
شیار
buildscript { repositories { google() } dependencies { def nav_version = "2.8.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
کاتلین
buildscript { repositories { google() } dependencies { val nav_version = "2.8.1" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
همچنین باید یکی از دو افزونه موجود را اعمال کنید.
برای ایجاد کد زبان جاوا مناسب برای جاوا یا ماژول های ترکیبی جاوا و کاتلین، این خط را به فایل build.gradle
برنامه یا ماژول خود اضافه کنید:
شیار
plugins { id 'androidx.navigation.safeargs' }
کاتلین
plugins { id("androidx.navigation.safeargs") }
از طرف دیگر، برای تولید کد Kotlin مناسب برای ماژول های فقط Kotlin اضافه کنید:
شیار
plugins { id 'androidx.navigation.safeargs.kotlin' }
کاتلین
plugins { id("androidx.navigation.safeargs.kotlin") }
شما باید android.useAndroidX=true
را در فایل gradle.properties
خود مطابق با مهاجرت به AndroidX داشته باشید.
پس از فعال کردن 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 بین مقصدها مراجعه کنید.