استخدام إجراءات التنقل وأجزاء

يمكنك بناء روابط بين الأجزاء باستخدام إجراءات التنقل. يؤدي استدعاء إجراء تنقل إلى نقل المستخدم من وجهة إلى أخرى. يشرح هذا الدليل الإجراءات ويوضّح كيفية إنشائها واستخدامها.

نظرة عامة

لكل إجراء رقم تعريف فريد ويمكن أن يحتوي على سمات إضافية، مثل الوجهة. تحدد الوجهة الشاشة التي ينقل إليها التطبيق المستخدم عند تشغيل الإجراء. يمكن أن يستخدم الإجراء أيضًا الوسيطات لنقل البيانات من وجهة إلى أخرى.

أمثلة

يمكنك تحديد الإجراءات في ملف 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>