ナビゲーション

ナビゲーションとは、ユーザーがアプリ内のさまざまなコンテンツ間を行き来する操作を指します。

Android Jetpack の Navigation コンポーネントには、Navigation ライブラリSafe Args Gradle プラグイン、アプリ ナビゲーションの実装に役立つツールが含まれています。Navigation コンポーネントは、単純なボタンのクリックから、アプリバーやナビゲーション ドロワーなどのより複雑なパターンまで、さまざまなナビゲーションのユースケースに対応しています。

主な概念

次の表に、ナビゲーションの 3 つの主要なコンセプトと、それらの実装に使用する主な型の概要を示します。

コンセプト

目的

タイプ

ホスト

現在のナビゲーション デスティネーションを含む UI 要素。つまり、ユーザーがアプリ内を移動すると、基本的にアプリはナビゲーション ホストとの間でデスティネーションを入れ替えます。

グラフ

アプリ内のすべてのナビゲーション デスティネーションとそれらの接続方法を定義するデータ構造

NavGraph

コントローラ

デスティネーション間のナビゲーションを管理する中心的なコーディネーター。このコントローラは、デスティネーション間の移動、ディープリンクの処理、バックスタックの管理などのメソッドを提供します。

NavController

利点と特長

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 フレームワークとやり取りする方法の詳細については、次のガイドをご覧ください。

Codelab

動画

サンプル