ナビゲーション 3

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

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

Navigation 3 は、大まかに次のように実装します。

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

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

Jetpack Navigation の改善点

Navigation 3 は、元の Jetpack Navigation API を次の点で改善しています。

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

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

コードサンプル

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