از کنش‌های ناوبری و Fragments استفاده کنید

می توانید با استفاده از اقدامات ناوبری بین قطعات ارتباط برقرار کنید. برانگیختن یک عمل ناوبری کاربر را از یک مقصد به مقصد دیگر می برد. این راهنما توضیح می دهد که اقدامات چیست و نشان می دهد که چگونه می توانید آنها را ایجاد و استفاده کنید.

نمای کلی

هر اقدام یک شناسه منحصر به فرد دارد و می تواند شامل ویژگی های اضافی مانند مقصد باشد. مقصد، صفحه‌ای را مشخص می‌کند که برنامه کاربر را هنگام فعال کردن عمل به آن می‌برد. این عمل همچنین می تواند از آرگومان ها برای انتقال داده ها از یک مقصد به مقصد دیگر استفاده کند.

  • Safe Args: با استفاده از کنش‌ها، می‌توانید شناسه‌های منبع را با عملیات Safe Args-generated جایگزین کنید و ایمنی بیشتری در زمان کامپایل فراهم کنید.
  • انیمیشن ها: همچنین می توانید انتقال بین مقصدها را متحرک کنید. برای اطلاعات بیشتر، متحرک کردن انتقال بین مقصدها را ببینید.

نمونه ها

با استفاده از تگ های <action> ، اقدامات را در فایل XML گراف ناوبری خود تعریف کنید. قطعه زیر عملی را اجرا می کند که انتقال از 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>