ナビゲーション アクションを使用して、フラグメント間の接続を作成できます。ナビゲーション アクションを呼び出すと、ユーザーが別のデスティネーションに移動します。このガイドでは、アクションの概要と、アクションを作成して使用する方法について説明します。
概要
各アクションには一意の ID があり、デスティネーションなどの追加の属性を含めることができます。デスティネーションでは、アクションがトリガーされたときにアプリでユーザーを移動させる画面を定義します。このアクションでは、引数を使用してデスティネーション間でデータを転送することもできます。
- Safe Args: アクションを使用して、リソース ID を Safe Args で生成されたオペレーションに置き換えることで、コンパイル時の安全性を高めることができます。
- アニメーション: デスティネーション間の遷移をアニメーション化することもできます。詳細については、デスティネーション間の遷移をアニメーション化するをご覧ください。
例
<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>