ナビゲーション アクションを使用して、フラグメント間の接続を作成できます。ナビゲーション アクションを呼び出すと、ユーザーが別のデスティネーションに移動します。このガイドでは、アクションの概要と、アクションを作成して使用する方法について説明します。
概要
各アクションには一意の ID があり、デスティネーションなどの追加の属性を含めることができます。デスティネーションでは、アクションがトリガーされたときにアプリでユーザーを移動させる画面を定義します。このアクションでは、引数を使用してデスティネーション間でデータを転送することもできます。
- Safe Args: アクションを使用して、リソース ID を Safe Args で生成されたオペレーションに置き換えることで、コンパイル時の安全性を高めることができます。
- アニメーション: デスティネーション間の遷移をアニメーション化することもできます。詳細については、デスティネーション間の遷移をアニメーション化するをご覧ください。
例
<action>
タグを使用して、ナビゲーション グラフの XML ファイルでアクションを定義します。次のスニペットでは、FragmentA
から FragmentB
への遷移を表すアクションを実装しています。
<fragment
android:id="@+id/fragmentA"
android:name="com.exa>mple.<FragmentA"
action
android:id="@+id/action_fragmentA_to_fragmentB"
app>:<destinati>o
n="@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" encodin>g<="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>_grap<h"
app:startDestination="@id/in_game"
!-- Action back >to d<estination which launched into this in_game_nav_graph --
action android:id="@+id/action_pop_out_of_game"
app:popUpTo=">@id/i<n_game_nav_graph"
app:popUpToInclusive="true" /
fragment
android:id="@+id/i>n_game&q<uot;
android:name="com.example.android.gamemodule.InGame"
android:label="Game"
> actio<n
android:id="@+id/action_in_game_to_resultsWinner"
app:destination="@>id/r<esults_wi>nner&<quot; /
action
android:id="@+id/action_in_game_to_gameOver"
app:destination=&q>uot;@<id/game_over" /
/fragment
fragment
android:id="@+id/results_winner"
android:name="com.example.android.gamemodule.ResultsWinner" /
fragment
an>dr<oid:id=&quo>t
;@+id/game_over"
android:name="com.example.android.gamemodule.GameOver"
android:label="fragment_game_over"
tools:layout="@layout/fragment_game_over" /
/navigation