عند تحديد إجراء في الرسم البياني للتنقّل باستخدام Kotlin DSL،
تُنشئ ميزة "التنقل" فئة NavAction
مقابلة لها تحتوي على
إعدادات الضبط المحدَّدة لهذا الإجراء، بما في ذلك ما يلي:
- الوجهة: رقم تعريف مورّد الوجهة المستهدفة.
- الوسيطات التلقائية:
android.os.Bundle
يحتوي على قيم تلقائية للوجهة المستهدفة، في حال توفيرها. - خيارات التنقل: خيارات التنقل، ممثلة على شكل
NavOptions
. تحتوي هذه الفئة على جميع التكوينات الخاصة للانتقال من وإلى الوجهة المستهدفة، بما في ذلك ضبط موارد الصور المتحركة وسلوك الانتقال السريع وما إذا كان ينبغي إطلاق الوجهة في وضع واحد من المستوى الأعلى.
الخيارات مع ميزة الإنشاء
تضيف navigate()
تلقائيًا وجهتك الجديدة إلى الحزمة الخلفية. يمكنك
تعديل سلوك navigate()
من خلال تمرير خيارات تنقّل إضافية إلى
طلب الإجراء navigate()
.
يمكنك إنشاء مثيل NavOptions
باستخدام دالة lambda بسيطة. مرِّر
navigate()
الوسيطات التي يمكنك تمريرها صراحةً إلى NavOptions.Builder
. بالنظر إلى الأمثلة التالية:
على سبيل المثال، يمكنك الاطّلاع على دليل الحزمة الخلفية للحصول على أمثلة حول كيفية تمرير الخيارات
إلى navigate()
في السياق.
خيارات مع XML
فيما يلي مثال على الرسم البياني يتكون من شاشتين مع إجراء للانتقال من إحداهما إلى الأخرى:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/a">
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
<action android:id="@+id/action_b_to_a"
app:destination="@id/a"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/a"
app:popUpToInclusive="true"/>
</fragment>
</navigation>
عند تضخيم الرسم البياني للتنقل، يتم تحليل هذه الإجراءات وإنشاء عناصر NavAction
مقابلة باستخدام الإعدادات المحدَّدة في الرسم البياني. على سبيل المثال، يتم تعريف action_b_to_a
بالانتقال من
الوجهة b
إلى الوجهة a
. يتضمّن الإجراء صورًا متحركة بالإضافة إلى سلوك
popTo
الذي يزيل جميع الوجهات من حزمة الخلفية. يتم تسجيل كل هذه الإعدادات على أنّها NavOptions
ويتم إرفاقها بـ NavAction
.
لاتّباع علامة NavAction
هذه، استخدِم NavController.navigate()
مع تمرير رقم تعريف الإجراء، كما هو موضّح في المثال التالي:
navController.navigate(R.id.action_b_to_a)
تطبيق الخيارات آليًا
توضّح الأمثلة السابقة كيفية تحديد NavOptions
ضمن ملف XML لرسم بياني للتنقل. ومع ذلك، يمكن أن تختلف الخيارات المحددة اعتمادًا على
القيود غير المعروفة في وقت الإنشاء. وفي هذه الحالات، يجب إنشاء NavOptions
وإعداده آليًا، كما هو موضّح في المثال التالي:
Kotlin
findNavController().navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
يستخدم هذا المثال شكلاً موسّعًا من navigate()
ويحتوي على وسيطات إضافية
Bundle
وNavOptions
. تحتوي جميع متغيرات navigate()
على إصدارات موسعة
تقبل الوسيطة NavOptions
.
يمكنك أيضًا تطبيق NavOptions
بشكل آلي عند الانتقال إلى روابط ضمنية لصفحات في التطبيق:
Kotlin
findNavController().navigate(
deepLinkUri,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
deepLinkUri,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
تستخدم صيغة navigate()
هذه Uri
للرابط الضمني لصفحة معيّنة، بالإضافة إلى مثيل NavOptions
.