می توانید با استفاده از اقدامات ناوبری بین قطعات ارتباط برقرار کنید. برانگیختن یک عمل ناوبری کاربر را از یک مقصد به مقصد دیگر می برد. این راهنما توضیح می دهد که اقدامات چیست و نشان می دهد که چگونه می توانید آنها را ایجاد و استفاده کنید.
نمای کلی
هر اقدام یک شناسه منحصر به فرد دارد و می تواند شامل ویژگی های اضافی مانند مقصد باشد. مقصد، صفحهای را مشخص میکند که برنامه کاربر را هنگام فعال کردن عمل به آن میبرد. این عمل همچنین می تواند از آرگومان ها برای انتقال داده ها از یک مقصد به مقصد دیگر استفاده کند.
- 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>