الطريقة الموصى بها للتنقل بين الوجهات هي استخدام الوسيطات الآمنة المكوّن الإضافي Gradle. ينشئ هذا المكوّن الإضافي فئات عناصر ومنصات تتيح التنقل الآمن من ناحية النوع بين الوجهات. استخدام الوسيطات الآمنة من أجل والتنقل وتمرير البيانات بين الوجهات.
تفعيل الوسيطات الآمنة
لإضافة الوسيطات الآمنة
إلى مشروعك، عليك تضمين classpath
التالي في ملف build.gradle
ذي المستوى الأعلى:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" 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 فئة لكل وجهة تنشأ فيها الإجراء. تشير رسالة الأشكال البيانية
يضيف اسم الفئة المُنشأ "الاتجاهات" إلى فئة الوجهة الأصلية
الاسم. على سبيل المثال، إذا تمت تسمية الوجهة الأصلية
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);
}
لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام "الوسيطات الآمنة"، يمكنك الاطّلاع على استخدام "الوسيطات الآمنة" لتمرير البيانات مع الحفاظ على أمان النوع
ضمان أمان الكتابة باستخدام "الوسيطات الآمنة"
التنقّل بين الوجهات باستخدام "الوسيطات الآمنة" المكوّن الإضافي Gradle. ينشئ هذا المكون الإضافي فئات بسيطة من الكائنات ومنصات الإنشاء تفعيل التنقّل الآمن من النوع وتمرير الوسيطة بين الوجهات
لإضافة الوسيطات الآمنة
إلى مشروعك، عليك تضمين classpath
التالي في ملف build.gradle
ذي المستوى الأعلى:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" 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
بعد تفعيل الوسيطات الآمنة، ينشئ المكوّن الإضافي رمزًا يحتوي على فئات
الطرق لكل إجراء قمت بتحديده. بالنسبة إلى كل إجراء، تتضمن "الوسيطات الآمنة" أيضًا
تنشئ فئة لكل وجهة ناشئة، وهي الوجهة
الذي نشأ منه الإجراء. يتكوّن اسم الفئة الذي يتم إنشاؤه من مجموعة من
اسم فئة الوجهة الأصلية وكلمة "الاتجاهات". على سبيل المثال:
إذا كانت الوجهة تحمل اسم 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); }
لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام "الوسيطات الآمنة"، يمكنك الاطّلاع على استخدام "الوسيطات الآمنة" لإرسال البيانات مع الحفاظ على أمان النوع في بيانات البطاقة بين .