ナビゲーション

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

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

主な概念

次の表に、ナビゲーションにおける 3 つの主要な概念と、その実装に使用する主な型をまとめます。

概念

目的

タイプ

ホスト

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

グラフ

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

NavGraph

コントローラ

デスティネーション間のナビゲーションを中央で管理する調整役。このコントローラが、デスティネーション間の移動、ディープリンクの処理、バックスタックの管理などを実行するためのメソッドを提供します。

NavController

メリットと機能

Navigation コンポーネントには、他にも以下のような多くのメリットと機能があります。

  • アニメーションと遷移: アニメーションと遷移用の標準化されたリソースを提供します。
  • ディープリンク: ユーザーをデスティネーションに直接誘導するディープリンクを実装して処理します。
  • UI パターン: ナビゲーション ドロワーやボトム ナビゲーションなどを、最小限の追加作業で組み込むためのパターンをサポートします。
  • 型安全性: デスティネーション間を移動してデータを渡すときの型安全性を提供する Safe Args Gradle プラグインが含まれています。
  • ViewModel のサポート: ナビゲーション グラフに対する ViewModel のスコープ設定を有効にして、グラフのデスティネーション間で UI 関連のデータを共有できます。
  • フラグメント トランザクション: フラグメント トランザクションを完全にサポートおよび処理します。
  • 「戻る」と「上へ」: 「戻る」および「上へ」アクションをデフォルトで正しく処理します。

環境をセットアップする

プロジェクトに Navigation のサポートを組み込むには、アプリの 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

動画

サンプル