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