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

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

نظرة عامة

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

أمثلة

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