ナビゲーションとは、ユーザーがアプリ内のさまざまなコンテンツ間を行き来する操作を指します。
Android Jetpack の Navigation コンポーネントには、Navigation ライブラリ、Safe Args Gradle プラグイン、アプリ ナビゲーションの実装に役立つツールが含まれています。Navigation コンポーネントは、単純なボタンクリックから、アプリバーやナビゲーション ドロワーなどの複雑なパターンまで、さまざまなナビゲーションのユースケースに対応しています。
主要なコンセプト
次の表に、ナビゲーションの主なコンセプトと、その実装に使用する主なタイプの概要を示します。
コンセプト |
目的 |
タイプ |
---|---|---|
ホスト |
現在のナビゲーション デスティネーションを含む UI 要素。ユーザーがアプリ内を移動すると、基本的にはアプリがナビゲーション ホストを出し入れしてデスティネーションを入れ替えます。 |
|
グラフ |
アプリ内のすべてのナビゲーション デスティネーションと、それらの接続方法を定義するデータ構造。 |
|
コントローラ |
デスティネーション間のナビゲーションを中央で管理する調整役。このコントローラが、デスティネーション間の移動、ディープリンクの処理、バックスタックの管理などを実行するためのメソッドを提供します。 |
|
リンク先 |
ナビゲーション グラフ内のノード。ユーザーがこのノードに移動すると、ホストはそのコンテンツを表示します。 |
通常、ナビゲーション グラフの作成時に作成されます。 |
ルート |
宛先とそれに必要なデータを一意に識別します。 経路を使用して移動できる。ルートを使って目的地までスムーズに移動できます。 |
シリアル化可能なデータ型。 |
メリットと機能
Navigation コンポーネントには、他にも以下のような多くのメリットと機能があります。
- アニメーションと遷移: アニメーションと遷移用の標準化されたリソースを提供します。
- ディープリンク: ユーザーをデスティネーションに直接誘導するディープリンクを実装して処理します。
- UI パターン: ナビゲーション ドロワーやボトム ナビゲーションなどを、最小限の追加作業で組み込むためのパターンをサポートします。
- 型安全性: 型安全性によるデスティネーション間でのデータ受け渡しのサポートが含まれます。
- ViewModel のサポート: ナビゲーション グラフに対する
ViewModel
のスコープ設定を有効にして、グラフのデスティネーション間で UI 関連のデータを共有できます。 - フラグメント トランザクション: フラグメント トランザクションを完全にサポートおよび処理します。
- 「戻る」と「上へ」: 「戻る」および「上へ」アクションをデフォルトで正しく処理します。
環境をセットアップする
プロジェクトに Navigation のサポートを組み込むには、アプリの build.gradle
ファイルに以下の依存関係を追加します。
Groovy
dependencies { def nav_version = "2.8.0" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" }
Kotlin
dependencies { val nav_version = "2.8.0" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") }
他のアーキテクチャ コンポーネントをプロジェクトに追加する方法については、プロジェクトにコンポーネントを追加するをご覧ください。
次のステップ
Navigation コンポーネントに関連するドキュメントとリソースについては、以下をご覧ください。
詳細ガイド
ナビゲーション ホストと NavController
を実装する方法、およびそれらが Compose や他の UI フレームワークとどのようにやり取りするかについて詳しくは、以下のガイドをご覧ください。
- ナビゲーション コントローラを作成する:
NavController
の作成方法について説明しています。 - ナビゲーション グラフを作成する: ナビゲーション ホストとナビゲーション グラフを作成する方法について詳しく説明しています。
- デスティネーションに移動する:
NavController
を使用してグラフ内のデスティネーション間を移動する方法について説明しています。
Codelab
動画
- Navigation の移動
- 単一アクティビティに移行する際の 10 のベスト プラクティス
- 単一アクティビティに移行する理由、タイミング、方法(Android Dev Summit '18)
- Android Jetpack: ナビゲーション コントローラによる UI ナビゲーションの管理(Google I/O 2018)