Navigation 3 は、Compose と連携するように設計された新しいナビゲーション ライブラリです。Navigation 3 では、バックスタックを完全に制御でき、デスティネーション間の移動はリストからのアイテムの追加や削除と同じくらい簡単です。このライブラリは、次の機能を提供することで、柔軟なアプリ ナビゲーション システムを作成します。
- バックスタックをモデル化するための規則。バックスタックの各エントリは、ユーザーが移動したコンテンツを表します。
- バックスタックの変更(アニメーションを含む)に応じて自動的に更新される UI
- バックスタック内のアイテムのスコープ。アイテムがバックスタックにある間、状態を保持できます。
- 複数の目的地を同時に表示し、レイアウトをシームレスに切り替えられるアダプティブ レイアウト システム
- コンテンツが親レイアウト(メタデータ)と通信するためのメカニズム
大まかには、次の方法で Navigation 3 を実装します。
- アプリ内でユーザーが移動できるコンテンツをそれぞれ一意のキーで定義し、そのキーをコンテンツに解決する関数を追加します。キーをコンテンツに解決するをご覧ください。
- ユーザーがアプリ内を移動する際にキーがプッシュされ、削除されるバックスタックを作成します。バックスタックを作成するをご覧ください。
NavDisplayを使用して、アプリのバックスタックを表示します。バックスタックが変更されるたびに、UI を更新して関連するコンテンツを表示します。バックスタックを表示するをご覧ください。- 必要に応じて
NavDisplayのシーン戦略を変更して、アダプティブ レイアウトとさまざまなプラットフォームをサポートします。
Navigation 3 の完全なソースコードは AOSP で確認できます。
Jetpack Navigation の改善
Navigation 3 では、元の Jetpack Navigation API が次のように改善されています。
- Compose との統合を簡素化
- バックスタックを完全に制御できる
- バックスタックから複数のデスティネーションを同時に読み取ることができるレイアウトを作成できるようになり、ウィンドウ サイズやその他の入力の変化に適応できるようになります。
Navigation 3 の原則と API 設計の選択肢について詳しくは、こちらのブログ投稿をご覧ください。
コードサンプル
レシピ リポジトリには、Navigation 3 の構成要素を使用して一般的なナビゲーションの課題を解決する方法の例が含まれています。