يمكنك بناء روابط بين الأجزاء باستخدام إجراءات التنقل. يؤدي استدعاء إجراء تنقل إلى نقل المستخدم من وجهة إلى أخرى. يشرح هذا الدليل الإجراءات ويوضّح كيفية إنشائها واستخدامها.
نظرة عامة
لكل إجراء رقم تعريف فريد ويمكن أن يحتوي على سمات إضافية، مثل الوجهة. تحدد الوجهة الشاشة التي ينقل إليها التطبيق المستخدم عند تشغيل الإجراء. يمكن أن يستخدم الإجراء أيضًا الوسيطات لنقل البيانات من وجهة إلى أخرى.
- الوسيطات الآمنة: من خلال الإجراءات، يمكنك استبدال أرقام تعريف الموارد بعمليات إنشاء المتوسطات الآمنة، ما يضمن أمان إضافي في وقت تجميع البيانات.
- الصور المتحركة: يمكنك أيضًا تحريك الانتقالات بين الوجهات. للمزيد من المعلومات، يُرجى الاطّلاع على تحريك عمليات الانتقال بين الوجهات.
أمثلة
يمكنك تحديد الإجراءات في ملف XML للرسم البياني للتنقّل باستخدام علامات <action>
. ينفِّذ المقتطف التالي إجراءً يمثّل عملية انتقال من FragmentA
إلى FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
التنقّل باستخدام إجراء
للتنقل باستخدام هذا الإجراء، يمكنك استدعاء NavController.navigate()
وتمريره
إلى id
الإجراء:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
الإجراءات العامة
يمكنك استخدام الإجراءات العامة للانتقال إلى وجهة من أي مكان.
بالنسبة إلى أي وجهة في تطبيقك يمكن الوصول إليها من خلال أكثر من مسار، حدِّد إجراءً عامًا مقابلاً يتنقل إلى تلك الوجهة.
بالنظر إلى المثال التالي. يجب أن تظهر الوجهة results_winner
وgame_over
إلى وجهة المنزل. يتيح إجراء
action_pop_out_of_game
إمكانية تنفيذ ذلك،
ويُعدّ action_pop_out_of_game
إجراءً عامًا لا يستند إلى أي جزء محدّد.
وهذا يعني أنّه يمكن الإشارة إليه والطلب منه في أي مكان ضمن
in_game_nav_graph
.
<?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"
android:id="@+id/in_game_nav_graph"
app:startDestination="@id/in_game">
<!-- Action back to destination which launched into this in_game_nav_graph -->
<action android:id="@+id/action_pop_out_of_game"
app:popUpTo="@id/in_game_nav_graph"
app:popUpToInclusive="true" />
<fragment
android:id="@+id/in_game"
android:name="com.example.android.gamemodule.InGame"
android:label="Game">
<action
android:id="@+id/action_in_game_to_resultsWinner"
app:destination="@id/results_winner" />
<action
android:id="@+id/action_in_game_to_gameOver"
app:destination="@id/game_over" />
</fragment>
<fragment
android:id="@+id/results_winner"
android:name="com.example.android.gamemodule.ResultsWinner" />
<fragment
android:id="@+id/game_over"
android:name="com.example.android.gamemodule.GameOver"
android:label="fragment_game_over"
tools:layout="@layout/fragment_game_over" />
</navigation>