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

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

نظرة عامة

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

أمثلة

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