ナビゲーション 3

Navigation 3 は、Compose と連携するように設計されたナビゲーション ライブラリです。Navigation 3 を使用すると、バックスタックを完全に制御でき、リストアイテムの追加や削除によって複数のデスティネーション間を移動できます。このライブラリは、次の機能を提供することで、柔軟なアプリ ナビゲーション システムを作成します。

  • バックスタックをモデル化するための規則。バックスタックの各エントリは、ユーザーがナビゲートしたコンテンツを表します。
  • バックスタックの変更(アニメーションを含む)に応じて自動的に更新される UI
  • バックスタック内のアイテムのスコープ。アイテムがバックスタックにある間、状態を保持できます。
  • 複数のデスティネーションを同時に表示し、レイアウトをシームレスに切り替えられるアダプティブ レイアウト システム
  • コンテンツが親レイアウトと通信するためのメカニズム(メタデータ)
  • 画面間で結果を返すためのデスティネーション間の通信

大まかには、次の方法で Navigation 3 を実装します。

  1. アプリ内でユーザーがナビゲート可能なコンテンツをそれぞれ一意のキーで定義し、そのキーをコンテンツに解決する関数を追加します。キーをコンテンツに解決するをご覧ください。
  2. ユーザーがアプリ内を移動するたびにキーがプッシュされたり削除されたりするバックスタックを作成します。バックスタックを作成するをご覧ください。
  3. NavDisplay を使用して、アプリのバックスタックを表示します。バックスタックが変更されるたびに、UI が更新されて関連するコンテンツが表示されます。バックスタックを表示するをご覧ください。
  4. 必要に応じて NavDisplay のシーン戦略を変更し、アダプティブ レイアウトとさまざまなプラットフォームをサポートします。
  5. ディープリンクをサポートして、デスティネーションに直接移動できるようにする。

Navigation 3 の完全なソースコードは AOSP で確認できます。

Jetpack Navigation の改善

Navigation 3 は、元の Jetpack Navigation API を次のように改善しています。

  • Compose との統合を簡素化
  • デベロッパーによるバックスタックの完全制御が可能に
  • バックスタックから複数のデスティネーションを同時に読み取れるレイアウトの作成を可能にし、ウィンドウ サイズやその他の入力の変化に適応できるようにする

Navigation 3 の原則と API 設計の選択について詳しくは、お知らせのブログ投稿をご覧ください。

コードサンプル

レシピ リポジトリには、Navigation 3 のビルディング ブロックを使用して一般的なナビゲーションの課題を解決する方法の例が含まれています。