عند تحديد إجراء في الرسم البياني للتنقل باستخدام لغة Kotlin DSL،
يؤدي التنقّل إلى إنشاء فئة NavAction
مقابلة تحتوي على
الإعدادات المحددة لهذا الإجراء، بما في ذلك ما يلي:
- الوجهة: رقم تعريف المورد للوجهة المستهدَفة.
- الوسيطات التلقائية:
android.os.Bundle
تحتوي على القيم التلقائية للوجهة المستهدفة، في حال توفيرها. - خيارات التنقل: خيارات التنقل، يتم تمثيلها على شكل
NavOptions
تحتوي هذه الفئة على جميع الإعدادات الخاصة الانتقال من وإلى الوجهة المستهدفة، بما في ذلك الرسوم المتحركة تهيئة المورد وسلوك البوب وما إذا كان ينبغي في وضع علوي واحد.
الخيارات مع ميزة Compose
يضيف 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
.