ナビゲーション
androidx.navigation
androidx.navigation.compose
androidx.navigation.dynamicfeatures
androidx.navigation.dynamicfeatures.fragment
androidx.navigation.dynamicfeatures.fragment.ui
androidx.navigation.fragment
androidx.navigation.fragment.compose
androidx.navigation.testing
androidx.navigation.ui
| 最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
|---|---|---|---|---|
| 2025 年 11 月 5 日 | 2.9.6 | - | - | - |
依存関係の宣言
Navigation への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.6" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.6" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
To add Safe Args
to your project, include the following classpath in your top level build.gradle file:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.6" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.6" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
You must also apply one of two available plugins.
To generate Java language code suitable for Java or mixed Java and Kotlin modules, add
this line to your app or module's build.gradle file:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
You must have android.useAndroidX=true in your
gradle.properties file as per
Migrating to AndroidX.
Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 2.9
バージョン 2.9.6
2025 年 11 月 5 日
androidx.navigation:navigation-*:2.9.6 がリリースされました。バージョン 2.9.6 にはこれらの commit が含まれています。
バグの修正
- Navigation
SafeArgsプラグインが最新の Android Gradle プラグイン API に移行されました。これにより、すべての AGP 8.4.2 以降のリリースとの互換性が確保されます。これらの変更の結果、プラグインによって生成されたファイルの出力ディレクトリが AGP によって提供されるデフォルトの場所に変更されました。(Ie09d6、I7c431、b/203559535、b/293920476、b/269532448、b/443261197) - AGP 9.0.0-alpha04 以降で使用する場合、Navigation
SafeArgsプラグインでuseAndroidXプロパティを設定する必要がなくなりました。(I6c3a4、b/444746731、b/443106400)
バージョン 2.9.5
2025 年 9 月 24 日
androidx.navigation:navigation-*:2.9.5 がリリースされました。バージョン 2.9.5 にはこれらの commit が含まれています。
バグの修正
- Navigation Safe Args で、AGP 9.0 の組み込み kotlin のサポートを処理できるようになりました。(I1d9d76)
依存関係の更新
- Navigation Safe Args プラグインが Android Gradle プラグイン バージョン 8.4.2 に依存するようになりました。(b/431847270、I5932a)
バージョン 2.9.4
2025 年 9 月 10 日
androidx.navigation:navigation-*:2.9.4 がリリースされました。バージョン 2.9.4 にはこれらの commit が含まれています。
バグの修正
NavHostトランジションでハンドラが無効になった後、予測型「戻る」イベントがフレームの途中で配信された場合のクラッシュを防止(I5667c、b/384186542)
バージョン 2.9.3
2025 年 7 月 30 日
androidx.navigation:navigation-*:2.9.3 がリリースされました。バージョン 2.9.3 にはこれらの commit が含まれています。
バグの修正
OnDestinationChangedListenersの使用時にConcurrentModificationExceptionが発生するNavControllerのエラーを修正しました。(If7406、b/417784831)navigate(uri, navOptions,navigationExtras)の使用時に、エキストラが無視されるエラーを修正しました。(I67fb7、b/430336813)
バージョン 2.9.2
2025 年 7 月 16 日
androidx.navigation:navigation-*:2.9.2 がリリースされました。バージョン 2.9.2 にはこれらの commit が含まれています。
バグの修正
- エントリの上のダイアログが閉じられたときにエントリが再開されない問題を修正しました(Idb20e、b/418746335)
- カスタム
NavTypesを使用中に型安全なルートでSavedStateHandleをテストする際のMissingFieldExceptionエラーを修正しました。(I2f843、b/421002511)
バージョン 2.9.1
2025 年 7 月 2 日
androidx.navigation:navigation-*:2.9.1 がリリースされました。バージョン 2.9.1 にはこれらの commit が含まれています。
バグの修正
- シングル トップを使用してインスタンス化された
NavEntriesがLifecycle.Stateで CREATED を超えない問題を修正しました。(I043ba、b/421095236)
バージョン 2.9.0
2025 年 5 月 7 日
androidx.navigation:navigation-*:2.9.0 がリリースされました。バージョン 2.9.0 にはこれらの commit が含まれています。
2.8.0 以降の重要な変更
- Navigation Safe Args アクションが
@CheckResultアノテーション付きで生成されるようになり、確実に使用されるようになりました。
SupportingPane インターフェース
- カスタム ナビゲーターは、デスティネーションが
SupportingPaneインターフェースを実装していることをマークできるようになりました。これにより、これらのデスティネーションが他のデスティネーションとともに表示されることがNavControllerに示されます。このインターフェースを使用すると、複数の宛先を同時にRESUMEDできます。
Compose Kotlin マルチプラットフォーム
- ナビゲーションで、
IntentではなくNavDeepLinkRequestを受け取る新しい共通のNavController.handleDeepLink()関数が提供されるようになりました。これにより、Android 以外のプラットフォームでもディープリンクを適切に処理できます。Konstantin Tskhovrebov さん、ありがとうございました。 - Navigation に、他のプラットフォームの Android の URI と互換性のある API である新しい共通パーサー関数
NavUriが追加されました。これにより、プラットフォームに依存しない方法で URI を作成できます。Konstantin Tskhovrebov さん、ありがとうございました。
型安全関数
- 以前は
reifiedメソッド(composable<YourScreen>に、KClassインスタンスを直接受け取る非具現化バージョンが追加されました。 - Navigation の型安全性が、ルートまたはルートの引数型として値クラスをサポートするようになりました。
バージョン 2.9.0-rc01
2025 年 4 月 23 日
androidx.navigation:navigation-*:2.9.0-rc01 がリリースされました。バージョン 2.9.0-rc01 には、これらの commit が含まれています。
バグの修正
- Jetpack Navigation から、実際には機能しない Android 以外のプラットフォーム ターゲットをすべて削除しました。代わりに、さまざまなプラットフォームのスタブが提供されるようになりました。(I2877d)
バージョン 2.9.0-beta01
2025 年 4 月 9 日
androidx.navigation:navigation-*:2.9.0-beta01 がリリースされました。バージョン 2.9.0-beta01 にはこれらの commit が含まれています。
API の変更
parseStringAsNavUriの共通 API が、String を受け取るNavUriファクトリ関数に変更されました。(I4db6e、b/403616316)
依存関係の更新
- このライブラリは Kotlin 2.0 言語レベルをターゲットとするようになり、KGP 2.0.0 以降が必要になりました。(Idb6b5)
バージョン 2.9.0-alpha09
2025 年 3 月 26 日
androidx.navigation:navigation-*:2.9.0-alpha09 がリリースされました。バージョン 2.9.0-alpha09 には、これらの commit が含まれています。
新機能
navigation-testingモジュールが、Android に加えて、パソコン、Linux、macOS、iOS をサポートするようになりました。(I2b770、b/398265336)NavTypeは、Android に加えて、パソコン、Linux、macOS、iOS でもサポートされるようになりました。(I297d8)
バージョン 2.9.0-alpha08
2025 年 3 月 12 日
androidx.navigation:navigation-*:2.9.0-alpha08 がリリースされました。バージョン 2.9.0-alpha08 にはこれらの commit が含まれています。
バグの修正
- Navigation
2.8.9以降: Navigation 2.8.8 で見つかった回帰を修正しました。この回帰では、ディープリンクが一致と見なされるには、ディープリンク リクエストまたはインテントのすべてのフィールドと完全に一致する必要がありました。これにより、部分一致を含むディープリンクで、他のディープリンクがないものが機能しなくなりました。(Ie5e36、b/399826566)
外部からの協力
NavUriを作成する新しい共通パーサー関数。Konstantin Tskhovrebov さん、ありがとうございました。(If0a6a)
バージョン 2.9.0-alpha07
2025 年 2 月 26 日
androidx.navigation:navigation-*:2.9.0-alpha07 がリリースされました。バージョン 2.9.0-alpha07 にはこれらの commit が含まれています。
バグの修正
- 非包括的なポップで
saveStateを試みると、null の savedState が生成され、復元時にクラッシュする可能性がある問題を修正しました。(I9f3e8、b/395091644) - Navigation 2.8.8 以降: ディープリンクとディープリンク リクエストの URI、アクション、MIME が完全に一致する必要がある
NavDeepLinkの照合を修正しました。1 つまたは 2 つのフィールドのみが一致する場合、照合は許可されなくなります。(I3b029、b/395712033) - Navigation 2.8.8 以降: ワイルドカード パスを含むルートが追加されたディープリンクと一致しないバグを修正しました(I7ea92、b/389970341)
外部からの協力
- navigation-common、navigation-runtime、navigation-compose の各 API を共通プラットフォームに抽出します。Konstantin Tskhovrebov さん、ありがとうございました。(I1e626、Ica76f、Idf479)
既知の問題
- b/395712033 に対応するための作業により、ディープリンク リクエストや
Intentと同じフィールドをすべてディープリンクに含めることが誤って必須になっています。ディープリンクは、ディープリンクが持つフィールドと一致させるだけでよく、含まれていないフィールドは無視されるべきです。これは、b/399826566 の一部として、今後のリリースで修正される予定です。
バージョン 2.9.0-alpha06
2025 年 2 月 12 日
androidx.navigation:navigation-*:2.9.0-alpha06 がリリースされました。バージョン 2.9.0-alpha06 には、これらの commit が含まれています。
新機能
- Navigation Safe Args アクションが
@CheckResultアノテーション付きで生成されるようになり、確実に使用されるようになりました。(I14d4c、b/356323084)
バグの修正
NavControllerで、バックスタックの状態がリストに保存されたときに、配列に復元しようとしていたエラーを修正しました。(Idfb9b)- Navigation
2.8.7以降: Navigation Safe Args がコンポーザブル デスティネーションをサポートするようになりました。(I35320、b/362791955)
バージョン 2.9.0-alpha05
2025 年 1 月 29 日
androidx.navigation:navigation-*:2.9.0-alpha05 がリリースされました。バージョン 2.9.0-alpha05 には、これらの commit が含まれています。
バグの修正
- Navigation Compose を使用しているときに、予期しないスケール アニメーションが発生する問題を修正しました。(I480f4、b/353294030)
- ナビゲーション
2.8.6: XML を介して提供されるNavDestinationラベルは、カスタムNavTypeロジックが尊重されるようにNavType.getを介して解析されます。(I7ec2f、b/388100796) - Navigation
2.8.6以降:dataPatternを使用してアクティビティに移動する際、ActivityNavigatorは引数のNavTypeを使用して引数の値をエンコードするようになりました(I16376、b/383616432) - Navigation
2.8.5以降: Navigation Compose を使用し、現在のアニメーションが終了するのと同じフレームで navigate を呼び出すと、予期しないスケール アニメーションが発生する問題を修正しました。(I26cb1、b/353294030)
バージョン 2.9.0-alpha04
2024 年 12 月 11 日
androidx.navigation:navigation-*:2.9.0-alpha04 がリリースされました。バージョン 2.9.0-alpha04 には、これらの commit が含まれています。
新機能
- 以前は
reifiedメソッド(composable<YourScreen>に、KClassインスタンスを直接受け取る非具現化バージョンが追加されました。(Ia7eed、Id2879、Ibf244、I17d79、Id09d2、I54696、Ia47be、I93281、Ic1bf0、Iba4ee、If56a5、Icf969、I67644、I6f788、b/382094941、b/366291612、b/381938808)
次の表に、具現化された API と KClass API を示します。
| 具現化 | KClass |
|---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
API の変更
- 型安全性のための Kotlin 固有の
NavGraph.setStartDestinationオーバーロードは、Java ソースから隠されています。(Ic640c、b/364634035)
バグの修正
- Navigation
2.8.5以降: バックスタックが 1 つのエントリまでポップダウンされ、同じフレーム内でシステムの [戻る] がトリガーされると、NavHostがPredictiveBackHandler内で例外をスローする問題を修正しました。(I1a429、b/375343407) - Navigation
2.8.5以降: グラフのstartDestinationを更新する際のNavDestinationNullPointerExceptionを修正しました。(I99421、b/361560785)
外部からの協力
- Navigation
2.8.5以降: ナビゲーションの型安全性が、カスタムのNavTypeを必要とせずに、ルートの引数型としてList<Enum>をサポートするようになりました。Csaba Kozák さん、ありがとうございます。(GH-725、b/375559962)
バージョン 2.9.0-alpha03
2024 年 11 月 13 日
androidx.navigation:navigation-*:2.9.0-alpha03 がリリースされました。バージョン 2.9.0-alpha03 にはこれらの commit が含まれています。
新機能
- Navigation の型安全性が、ルートまたはルートの引数型として値クラスをサポートするようになりました。(I9344a、b/374347483)
バグの修正
NavBackStackEntryにアタッチされたLifecycleObserverが、ホストLifecycleOwner(包含するアクティビティやフラグメントなど)のライフサイクル状態が変化したときにバックスタックの変更をトリガーする際に発生する可能性のあるConcurrentModificationExceptionを修正しました。(Ia9494)
バージョン 2.9.0-alpha02
2024 年 10 月 30 日
androidx.navigation:navigation-*:2.9.0-alpha02 がリリースされました。バージョン 2.9.0-alpha02 には、これらの commit が含まれています。
外部からの協力
- 新しい共通
NavController.handleDeepLink(request: NavDeepLinkRequest)メソッド。Konstantin Tskhovrebov さん、ありがとうございました。(I3e228)
バージョン 2.9.0-alpha01
2024 年 10 月 16 日
androidx.navigation:navigation-*:2.9.0-alpha01 がリリースされました。バージョン 2.9.0-alpha01 には、これらの commit が含まれています。
新機能
- カスタム ナビゲーターは、デスティネーションが
SupportingPaneインターフェースを実装していることをマークできるようになりました。これにより、これらのデスティネーションが他のデスティネーションとともに表示されることがNavControllerに示されます。このインターフェースを使用すると、複数の宛先を同時にRESUMEDできます。(Id5559) - Navigation
2.8.3以降:navigation-common、navigation-runtime、navigation-composeモジュールに新しい lint チェックが追加されました。これにより、@Serializableで正しくアノテーションされていない型安全なルートを特定できます。このチェックは、すべてのNavGraphBuilder拡張関数とNavDeepLinkBuilder拡張関数に適用されます。(I4a259、I95402、Ie601a、Id8c6e、I28bda、b/362725816) - Navigation
2.8.3以降:navigation-common、navigation-runtime、navigation-composeモジュールに新しい lint チェックが追加されました。これにより、@Keepで正しくアノテーションされていない Enum 引数を含む型安全なルートを特定できます。このチェックは、すべてのNavGraphBuilder拡張関数とNavDeepLinkBuilder拡張関数に適用されます。(I4a259、I95402、Ie601a、Id8c6e、I2b46f、b/358687142)
動作の変更
- 以前に
DESTROYEDされたNavControllerを使用しようとすると、IllegalStateExceptionが発生するようになりました。(I520da、b/369616172)
バグの修正
- Enum クラスが見つからない例外を更新し、最小化されたビルドで Enum クラスが消去された場合に
@Keepアノテーションを使用することを提案します。(I90e79、b/358137294)
既知の問題
Navigation 2.8.*で追加された新しい lint ルールに問題があり、Android Gradle プラグイン 8.4 以降で lint を実行しようとするとObsolete custom lint checkエラーが発生します。(b/368070326、b/371463741)
バージョン 2.8
バージョン 2.8.9
2025 年 3 月 12 日
androidx.navigation:navigation-*:2.8.9 がリリースされました。バージョン 2.8.9 にはこれらの commit が含まれています。
バグの修正
- Navigation 2.8.8 で見つかった回帰を修正しました。この回帰では、ディープリンクが一致と見なされるためには、ディープリンク リクエストまたはインテントのすべてのフィールドと正確に一致する必要がありました。これにより、部分一致を含むディープリンクで、他のディープリンクがないものが機能しなくなりました。(Ie5e36、b/399826566)
バージョン 2.8.8
2025 年 2 月 26 日
androidx.navigation:navigation-*:2.8.8 がリリースされました。バージョン 2.8.8 にはこれらの commit が含まれています。
バグの修正
- ワイルドカード パスを含むルートが追加されたディープリンクと一致しないバグを修正しました。(I7ea92、b/389970341)
- ディープリンクとディープリンク リクエストの URI、アクション、MIME が完全に一致する必要がある
NavDeepLinkの照合を修正しました。1 つまたは 2 つのフィールドのみが一致する場合、照合は許可されなくなります。(I3227f、b/395712033)
既知の問題
- b/395712033 に対応するための作業により、ディープリンク リクエストや
Intentと同じフィールドをすべてディープリンクに含めることが誤って必須になっています。ディープリンクは、ディープリンクが持つフィールドと一致させるだけでよく、含まれていないフィールドは無視されるべきです。これは、b/399826566 の一部として、今後のリリースで修正される予定です。
バージョン 2.8.7
2025 年 2 月 12 日
androidx.navigation:navigation-*:2.8.7 がリリースされました。バージョン 2.8.7 にはこれらの commit が含まれています。
バグの修正
- Navigation Safe Args がコンポーザブル デスティネーションをサポートするようになりました。(I35320、b/362791955)
バージョン 2.8.6
2025 年 1 月 29 日
androidx.navigation:navigation-*:2.8.6 がリリースされました。バージョン 2.8.6 にはこれらの commit が含まれています。
バグの修正
- XML で提供される
NavDestinationラベルはNavType.getを介して解析され、カスタムNavTypeロジックが尊重されます。(Id366d、b/388100796) dataPatternでアクティビティに移動する際、ActivityNavigatorは引数のNavTypeを使用して引数の値をエンコードしようとします。(I1a71d、b/383616432)
バージョン 2.8.5
2024 年 12 月 11 日
androidx.navigation:navigation-*:2.8.5 がリリースされました。バージョン 2.8.5 にはこれらの commit が含まれています。
バグの修正
- バックスタックが 1 つのエントリにポップダウンされ、同じフレーム内でシステムの [戻る] がトリガーされた場合、
NavHostがPredictiveBackHandler内で例外をスローする問題を修正しました。(I1a429、b/375343407) - グラフの
startDestinationを更新する際のNavDestinationNullPointerExceptionを修正しました。(I99421、b/361560785) - Navigation Compose を使用し、現在のアニメーションが終了するのと同じフレームで navigate を呼び出すと、予期しないスケール アニメーションが発生する問題を修正しました。(I26cb1、b/353294030)
NavBackStackEntryにアタッチされたLifecycleObserverが、ホストLifecycleOwner(包含するアクティビティやフラグメントなど)のライフサイクル状態が変化したときにバックスタックの変更をトリガーする際に発生する可能性のあるConcurrentModificationExceptionを修正しました。(Ia9494)
外部からの協力
- ナビゲーションの型安全性が、カスタム
NavTypeを必要とせずに、ルートの引数型としてList<Enum>をサポートするようになりました。Csaba Kozák さん、ありがとうございます。(GH-725、b/375559962)
バージョン 2.8.4
2024 年 11 月 13 日
androidx.navigation:navigation-*:2.8.4 がリリースされました。バージョン 2.8.4 にはこれらの commit が含まれています。
新機能
- Navigation
2.9.0-alpha03: ナビゲーションの型安全性が、ルートまたはルートの引数型として値クラスをサポートするようになりました(I9344a、b/374347483)
バグの修正
- Navigation
2.9.0-alpha01以降: 以前にDESTROYEDされたNavControllerを使用しようとすると、IllegalStateExceptionが発生するようになりました。(I520da、b/369616172)
バージョン 2.8.3
2024 年 10 月 16 日
androidx.navigation:navigation-*:2.8.3 がリリースされました。バージョン 2.8.3 にはこれらの commit が含まれています。
新機能
navigation-common、navigation-runtime、navigation-composeモジュールに新しい lint チェックを追加しました。これにより、@Serializableで正しくアノテーションが付けられていない型安全なルートを特定できます。このチェックは、すべてのNavGraphBuilder拡張関数とNavDeepLinkBuilder拡張関数に適用されます。(I4a259、I95402、Ie601a、Id8c6e、I28bda、b/362725816)navigation-common、navigation-runtime、navigation-composeモジュールに新しい lint チェックが追加されました。これにより、@Keepで正しくアノテーションが付けられていない Enum 引数を含む型安全なルートを特定できます。このチェックは、すべてのNavGraphBuilder拡張関数とNavDeepLinkBuilder拡張関数に適用されます。(I4a259、I95402、Ie601a、Id8c6e、I2b46f、b/358687142)
バグの修正
Navigation 2.8.*で追加された新しい lint ルールが、Android Gradle プラグイン 8.4 以降で lint を実行しようとするとObsolete custom lint checkエラーを引き起こす問題を修正しました。(I1be3d、b/368070326、b/371463741)
既知の問題
- Lint 16(AGP 8.7)以上で lint を実行しようとすると、ナビゲーション lint が Obsolete custom lint check エラーをスローします。(b/371926651)
バージョン 2.8.2
2024 年 10 月 2 日
androidx.navigation:navigation-*:2.8.2 がリリースされました。バージョン 2.8.2 にはこれらの commit が含まれています。
新機能
- ナビゲーション型安全性で、カスタム
NavTypeを必要とせずにDouble、Double?、DoubleArray、DoubleArray?、List<Double>、List<Double>?を含む Serializable クラスがサポートされるようになりました。(I570eb、Ibc4c0、I37461、I5bed4、b/359245753)
バグの修正
- Navigation がルートの引数を
NavTypeにマッピングできなかった場合のエラー メッセージが改善されました。新しいエラー メッセージには、引数名、引数の完全修飾名、ルートの完全修飾名が含まれます。(Id8416、b/346264232)
バージョン 2.8.1
2024 年 9 月 18 日
androidx.navigation:navigation-*:2.8.1 がリリースされました。バージョン 2.8.1 にはこれらの commit が含まれています。
新機能
- 型安全な API を使用して
popBackStackを試みる際に、具現化されたクラス型を受け取るpopBackStack関数が使用されることを保証する新しい lint ルールを追加しました。(Ief161、b/358095343)
バグの修正
- ナビゲーションでは、
NavGraphのstartDestinationに渡されるルートに、すべての必須引数の値(null ではなくデフォルト値のない引数を含む)が含まれていることが必要になりました。(I18e74、b/362594265) - ナビゲーションの Safe Args で、null 許容でない文字列のサポートが追加されました。これにより、「null」値が解析され、そのままバンドルに保存されます。これは、「null」値が null オブジェクトに解析される既存の動作とは異なります。この変更は、null 許容でない String 型にのみ適用されます。Nullable 文字列は変更されません。(I08b4a、b/348936238)
NavDestinationへのディープリンクは、デスティネーションに明示的に追加されたディープリンクを介してのみ可能になります。つまり、文字列ルートを受け取る navigate 関数のオーバーロードでのみ、デスティネーションのルートに移動できます。これにより、保護されている可能性のあるデスティネーションへのディープリンクが可能になる脆弱性が修正されます。(Ie30e6)
依存関係の更新
- Navigation Safe Args は Kotlin 2.X ではなく Kotlin 1.9.24 に依存するようになり、デベロッパーが強制的にアップデートされることはなくなりました。(a4129a)
- Navigation Compose が Compose
1.7.2に依存するようになりました。
バージョン 2.8.0
2024 年 9 月 4 日
androidx.navigation:navigation-*:2.8.0 がリリースされました。バージョン 2.8.0 にはこれらの commit が含まれています。
2.7.0 以降の重要な変更
Navigation Kotlin DSL の型安全性
- Navigation で、Kotlin シリアル化を使用して Kotlin DSL(Navigation Compose で使用)の型安全性が提供されるようになりました。これにより、型安全なオブジェクトとデータクラスを使用してナビゲーション グラフでデスティネーションを定義できます。
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
詳しくは、Navigation Compose と型安全性に関するブログ投稿をご覧ください。
Navigation Compose の予測型「戻る」機能
- Navigation Compose は、compose-animation の新しい
SeekableTransitionStateAPI を介して、アプリ内予測型「戻る」のサポートを提供するようになりました。これにより、戻るジェスチャーを使用して、カスタム トランジションで前の宛先を確認してから、ジェスチャーを完了してトランザクションを確定するか、キャンセルするかを決定できます。
Navigation フラグメントのコンポーザブル
NavHostFragmentの代わりにComposableNavHostFragmentを含む新しいnavigation-fragment-composeアーティファクトが追加されました。これにより、コンポーザブル デスティネーションをナビゲーション XML ファイルに追加できます。各composableの宛先は、トップレベルの引数なしの@Composableメソッドとして表現する必要があります。このメソッドの完全修飾名は、各宛先のandroid:name属性として使用されます。これらのデスティネーションのいずれかに移動すると、コンポーザブル コンテンツを表示するためのコンテナ フラグメントが作成されます。
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
その他の変更点
- Navigation Compose が Compose 1.7.0 に依存するようになりました。
- Navigation で、リスト、配列、マップなどのコレクション ベースの引数用の
NavType<T>のサブクラスである新しいCollectionNavType<T>クラスが提供されるようになりました。デフォルトのNavType配列(IntArrayType、LongArrayType、FloatArrayType、BoolArrayType、StringArrayType)はすべて、この新しいクラスから継承されるようになりました。 NavTypeに、Int、String、Boolean、Float、Long のリストの組み込みサポートが追加されました。
バージョン 2.8.0-rc01
2024 年 8 月 21 日
androidx.navigation:navigation-*:2.8.0-rc01 がリリースされました。バージョン 2.8.0-rc01 にはこれらの commit が含まれています。
バグの修正
- 最上位の Enum クラスをタイプセーフな引数として渡すときに発生するナビゲーションのクラッシュを修正しました。(I0ba76、b/358137294)
- Navigation 2.8 は SDK 34 で正しく動作するようになり、AndroidX ライブラリの残りの部分とともに 2.9 がリリースされるまで SDK 35 に切り替わることはありません。(b/358798728)
バージョン 2.8.0-beta07
2024 年 8 月 7 日
androidx.navigation:navigation-*:2.8.0-beta07 がリリースされました。バージョン 2.8.0-beta07 には、これらの commit が含まれています。
既知の問題
- b/358137294 により、別のクラスにネストされた列挙型のみがデフォルトでサポートされます。トップレベルの列挙型は、次のリリースでサポートされる予定です。
バグの修正
- 重複するデスティネーションや共有デスティネーションに移動する場合、ナビゲーションでは、グラフ内の現在地から最も近い一致するデスティネーションへの移動が優先されます。(Ic89a4、b/352006850)
- Safe Args のナビゲーションに新しい
NavType.EnumTypeが追加されました。つまり、Enum型にカスタムNavTypeが不要になりました。EnumのSerialNameはデフォルトの完全修飾名にする必要があります。(I66d22、b/346475493) - Safe Args のナビゲーションに、
Int?、Long?、Float?、Boolean?、Enum<*>?などの null 許容引数型の組み込みサポートが追加されました。(I32d13、I1c580、Ifba66、I978b0、Ide076、b/351994237) NavGraphに渡されたstartDestinationルートがstartDestination.routeと完全に一致する場合、NavGraphのstartDestinationはデフォルトの引数値を使用します。(I13762、b/354046047)
バージョン 2.8.0-beta06
2024 年 7 月 24 日
androidx.navigation:navigation-*:2.8.0-beta06 がリリースされました。バージョン 2.8.0-beta06 には、これらの commit が含まれています。
バグの修正
WrongStartDestinationTypelint チェックで渡されたクラス型のコンパニオン オブジェクトがチェックされず、lint でエラーが検出されない問題を修正しました。(I92b09)
バージョン 2.8.0-beta05
2024 年 7 月 10 日
androidx.navigation:navigation-*:2.8.0-beta05 がリリースされました。バージョン 2.8.0-beta05 にはこれらの commit が含まれています。
バグの修正
- ネストされた
NavGraphsが同じstartDestinationルートを共有している場合にsingleTopナビゲーションがクラッシュする問題を修正しました。(I17b94、b/294408596)
バージョン 2.8.0-beta04
2024 年 6 月 26 日
androidx.navigation:navigation-*:2.8.0-beta04 がリリースされました。バージョン 2.8.0-beta04 には、これらの commit が含まれています。
バグの修正
- Navigation が、パス引数の空の文字列によるナビゲーションをサポートするようになりました。(Ic5dbd、b/339481310)
@Serializable(with =...)を介してクラス フィールドで直接宣言されたカスタム シリアライザーのエラー メッセージを改善し、現在サポートされていない機能であることを明確にします。(I052b0、b/341319151)SavedStateHandleFactoryテスト API を Android 以外のテストで使用できるようになりましたが、Robolectric で Bundle を使用した引数解析をサポートする必要があります。(I76cdc、b/340966212)- Compose で型安全ナビゲーションを使用している場合に、プロセス終了後にアプリを再開すると状態の復元でクラッシュする問題を修正しました。(Ia8f38、b/341801005)
- Navigation Compose で、予測型「戻る」操作をキャンセルした後、ユーザーが戻る
NavBackStackEntryがRESUMEDライフサイクル状態に戻らない問題を修正しました。また、フリング後に元のデスティネーションがスナップインするのではなく、正しくアニメーションで戻るようになります。(I97a0c、b/346608857) - Navigation Compose で予測型「戻る」を使用している場合、ポップされるデスティネーションの z オーダーが適切になり、次のデスティネーションの上に正しくアニメーション表示されるようになりました。(I2077b、b/345993681)
バージョン 2.8.0-beta03
2024 年 6 月 12 日
androidx.navigation:navigation-*:2.8.0-beta03 がリリースされました。バージョン 2.8.0-beta03 には、これらの commit が含まれています。
API の変更
CollectionNavTypeに新しい抽象emptyCollection()メソッドが追加されました。引数として渡された空のコレクションを処理するには、これをオーバーライドします。(Ie4d84、b/341723133)
バグの修正
- 最終的な出力は URI エンコードされる必要があることを強調するため、
NavType.serializeAsValueとserializeAsValuesに関するドキュメントを追加しました。(Ida6bd、b/344943214) CollectionNavType引数が null の状態でtoRoute<T>を呼び出すとクラッシュする問題を修正しました。null のCollectionNavTypeでナビゲートする場合、出力引数は Serializable クラスで宣言されたデフォルト値、またはデフォルト値がない場合はemptyCollection()の戻り値になります。(I84158、Id630f、b/342672856)
バージョン 2.8.0-beta02
2024 年 5 月 29 日
androidx.navigation:navigation-*:2.8.0-beta02 がリリースされました。バージョン 2.8.0-beta02 には、これらの commit が含まれています。
バグの修正
- null 許容のカスタム
NavTypeでNavBackStackEntry.toRouteを使用するとClassCastExceptionがクラッシュする問題を修正しました。(I1c29b、b/342239473) - 現在のデスティネーションから ID で到達できないバックスタック エントリを復元しようとしたときに発生する、ナビゲーション バックスタックの状態復元に関する問題を修正しました。ルートは ID によってバックアップされているため、ルートで構築された宛先も影響を受けました。また、同じ根本的な問題が原因で
clearBackStack()を呼び出すとクラッシュする問題も修正しました。(I423c3、b/339908057)
バージョン 2.8.0-beta01
2024 年 5 月 14 日
androidx.navigation:navigation-*:2.8.0-beta01 がリリースされました。バージョン 2.8.0-beta01 にはこれらの commit が含まれています。
API の変更
SavedStateHandle.toRoute()は、カスタム引数型のtypeMapパラメータを受け取るようになりました。(Ie39fb、b/339026523)- Kotlin の Serializable オブジェクトから
SavedStateHandleを作成するテスト API をnavigation-testingに追加しました。(Id4867、b/339080702)
バグの修正
- Navigation Kotlin DSL 関数のパラメータ ドキュメントが追加されました。(I26a36)
バージョン 2.8.0-alpha08
2024 年 5 月 1 日
androidx.navigation:navigation-*:2.8.0-alpha08 がリリースされました。バージョン 2.8.0-alpha08 には、これらの commit が含まれています。
Navigation Compose の Safe Args
- Kotlin シリアル化に基づく Navigation Compose と Navigation Kotlin DSL のユーザーに対するコンパイル時の型安全性のサポートが完了し、以前は試験運用版だった API が安定版になりました。(Iea94d、I0eb0d、I873b7、I3a64b、I6c3a2、I11f0b、Ic3032、I8d394、I95710、Ice060、Id0e55、I45f8b、Idcdaf、If5380、I08b23、Ia5c59、b/188693139)
この機能は Kotlin Serialization を使用して、型安全なオブジェクトとデータクラスを介してナビゲーション グラフでデスティネーションを定義できるようにします。
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
詳しくは、Navigation Compose と型安全性に関するブログ投稿をご覧ください。
新機能
navigation-fragment-composeアーティファクトで、ComposableFragment内のコンポーザブル メソッドにLocalFragmentコンポジション ローカルが提供されるようになりました。(If35e5)NavTypeに、Int、String、Boolean、Float、Long のリストの組み込みサポートが追加されました。(I4b6dd、Ia914c、b/188693139)
バージョン 2.8.0-alpha07
2024 年 4 月 17 日
androidx.navigation:navigation-*:2.8.0-alpha07 がリリースされました。バージョン 2.8.0-alpha07 には、これらの commit が含まれています。
新機能
NavHostFragmentの代わりにComposableNavHostFragmentを含む新しいnavigation-fragment-composeアーティファクトを追加します。これにより、ナビゲーション XML ファイルにcomposableデスティネーションを追加できます。各composableの宛先は、トップレベルの引数なしの@Composableメソッドとして表現する必要があります。このメソッドの完全修飾名は、各宛先のandroid:name属性として使用されます。これらのデスティネーションのいずれかに移動すると、コンポーザブル コンテンツを表示するためのコンテナ フラグメントが作成されます。(I0ef2e、b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
API の変更
- Kotlin シリアル化に基づくアプローチを使用した Navigation Compose での Safe Args のサポートが継続されました。これらの API は完成しておらず、
ExperimentalSafeArgsApiアノテーションが付いています。このアノテーションは、今後のリリースで API サーフェス全体が完成したときに削除されます。(Iefd95、I409c8、 I5b5ac、I7e753、I960f8、I3eabd、I8ed5a、Ied2c9、I9b73c、I554db、Ib3aba、Ia668d、b/188693139)
バージョン 2.8.0-alpha06
2024 年 4 月 3 日
androidx.navigation:navigation-*:2.8.0-alpha06 がリリースされました。バージョン 2.8.0-alpha06 には、これらの commit が含まれています。
API の変更
- Kotlin シリアル化に基づくアプローチを使用した Navigation Compose での Safe Args のサポートが開始されました。これらの API は完成しておらず、
ExperimentalSafeArgsApiアノテーションが付いています。このアノテーションは、今後のリリースで API サーフェス全体が完成したときに削除されます。(I644e7、I98896、I2a1c5、I43a51、I836a1、Ic5eec、I39407、I24e41、If9e14、Ibb13e、If44d3、Icb70f、I8972f、I1d432、Icf32b、I20a14、I262aa、I7de99、I35990、I1033d、b/188693139)
バグの修正
NavHostが、デフォルトの contentAlignment 引数としてAlignment.TopStartを使用するようになりました。これにより、AnimatedContentのデフォルトと一致し、中央からのスケール トランジションが予期せず発生するインスタンスが修正されます。(I09e72、b/330111602)- Navigation Compose を使用中に予測型「戻る」ジェスチャーをフリックすると、
NavHostがすぐに終了するのではなく、カスタム トランジションを正しく完了するようになりました。(I99017、b/327292110)
バージョン 2.8.0-alpha05
2024 年 3 月 20 日
androidx.navigation:navigation-*:2.8.0-alpha05 がリリースされました。バージョン 2.8.0-alpha05 にはこれらの commit が含まれています。
新機能
defaultValueに依存することなく、startDestinationルートでNavGraphのstartDestinationに引数を直接渡せるようになりました。これは、ネストされたNavGraphstartDestinationsにも適用されます。(I0e0b5、b/109505019、b/188693139)
API の変更
- リスト、配列、マップなどのコレクション ベースの引数用の
NavType<T>のサブクラスである新しい抽象CollectionNavType<T>クラスを追加しました。(Ic6d63、b/188693139) - デフォルトの
NavType配列(IntArrayType、LongArrayType、FloatArrayType、BoolArrayType、StringArrayType)がすべてCollectionNavType型になりました。(Idcf79、b/188693139) NavTypeで、同じ型の 2 つの値が等しいかどうかを判断する新しいオープンvalueEqualsAPI が提供されるようになりました。(I6cb97、b/327229511)
バグの修正
- ディープリンクのクエリ パラメータで、引数名を囲む中かっこ(
{argName}など)の形式の値が、文字列ベースのNavTypesの有効な値として使用できるようになりました。これにより、このような値がすべての型で無効(または値がない)と見なされる問題が修正されます。(I18302、b/327274038) navigateやpopBackStackなどのルートをサポートするNavController関数で、ArrayNavTypesの引数で埋められたルートを正しく照合できるようになりました。(Iea805、b/327229511)
バージョン 2.8.0-alpha04
2024 年 3 月 6 日
androidx.navigation:navigation-*:2.8.0-alpha04 がリリースされました。バージョン 2.8.0-alpha04 にはこれらの commit が含まれています。
新機能
- Navigation Compose で、
composable関数またはnavigation関数の初期化の一部として定義することで、トランジションのSizeTranformを指定できるようになりました。(I91062、b/296912651)
バグの修正
- ジェスチャーなしでシステム バックを使用すると、Compose Navigation の
NavHostでトランジションが正しく表示されない問題を修正しました。(Iceeae、b/325998468)
バージョン 2.8.0-alpha03
2024 年 2 月 21 日
androidx.navigation:navigation-*:2.8.0-alpha03 がリリースされました。バージョン 2.8.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
NavBackStackEntry.savedStateHandleは、メインスレッドで実行する必要があるコードを使用しているため、@MainThreadとしてマークされるようになりました。(Ibb988、b/299523245)
バグの修正
- 関連付けられたエントリの
ViewModelが保存された状態に含まれていないため、NavGraphViewModel が早すぎるタイミングでDESTROYEDになる Navigation の問題を修正しました。(Ib6bb7、b/317581849)
依存関係の更新
- Navigation Compose が Compose 1.7.0-alpha03 に依存するようになりました。
バージョン 2.8.0-alpha02
2024 年 2 月 7 日
androidx.navigation:navigation-*:2.8.0-alpha02 がリリースされました。バージョン 2.8.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
- Navigation Compose は、compose-animation の新しい
SeekableTransitionStateAPI を介して、アプリ内予測型「戻る」のサポートを提供するようになりました。これにより、戻るジェスチャーを使用して、カスタム トランジションで前の宛先を確認してから、ジェスチャーを完了してトランザクションを確定するか、キャンセルするかを決定できます。(I8b8e9)
バージョン 2.8.0-alpha01
2024 年 1 月 24 日
androidx.navigation:navigation-*:2.8.0-alpha01 がリリースされました。バージョン 2.8.0-alpha01 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- デスティネーションで複数の
saveState呼び出しを行うと、複数の状態が保存されるが、復元できるのは最初の状態のみになるBackStackStateリークを修正しました。(I598b0、b/309559751) NavigationUIヘルパーを使用してアプリバーのタイトルを設定する際に、String 以外の引数が正しく表示されない問題を修正しました。(#636、b/316676794)
依存関係の更新
- Navigation Compose が Compose
1.7.0-alpha01に依存するようになり、予期しないスケール アニメーションが発生する可能性のある問題が修正されました。(b/297258205)
外部からの協力
NavigationUIヘルパーを使用してアプリバーのタイトルを設定する際に、文字列以外の引数の表示に関する問題を修正してくれた SimonMarquis に感謝します。
バージョン 2.7.7
バージョン 2.7.7
2024 年 2 月 7 日
androidx.navigation:navigation-*:2.7.7 がリリースされました。バージョン 2.7.7 に含まれる commit については、こちらをご覧ください。
バグの修正
- ナビゲーション
2.8.0-alpha01からバックポート: 単一のNavBackStackEntryで複数のsaveState()呼び出しを行うと、複数の状態が保存されるものの、復元できるのは最初に保存された状態のみになるBackStackStateリークを修正しました。(I598b0、b/309559751) - Navigation
2.8.0-alpha01からバックポート:NavigationUIヘルパーを使用してアプリバーのタイトルを設定すると、文字列以外の引数が正しく表示されない問題を修正しました。(#636、b/316676794)
外部からの協力
NavigationUIヘルパーを使用してアプリバーのタイトルを設定する際に、文字列以外の引数の表示に関する問題を修正してくれた SimonMarquis に感謝します。
バージョン 2.7.6
バージョン 2.7.6
2023 年 12 月 13 日
androidx.navigation:navigation-*:2.7.6 がリリースされました。バージョン 2.7.6 に含まれる commit については、こちらをご覧ください。
バグの修正
NavGraphequals()関数が、呼び出し元のグラフだけでなく、他のグラフのノードも正しく考慮するようになりました。これにより、異なる ID のノードを持つグラフが同等と見なされなくなります(I401cb、b/311414915)
バージョン 2.7.5
バージョン 2.7.5
2023 年 11 月 1 日
androidx.navigation:navigation-*:2.7.5 がリリースされました。バージョン 2.7.5 に含まれる commit については、こちらをご覧ください。
パフォーマンスの改善
- 2 つのグラフを比較する際のパフォーマンス(時間と割り当て数の両方)を大幅に改善しました。つまり、内部で新しいグラフと既存のグラフを比較する
setGraphなどの呼び出しが大幅に高速化され、スキップされるフレームが少なくなります。この改善につながる徹底的な分析を行った Michał Z に感謝します。(I6ad62) NavHostは、更新された状態を読み取るために 2 回目のパスを待つ必要がなくなり、最初のコンポジション パスで開始先をレンダリングするようになりました。(I439a7、b/304852206)
バグの修正
- グラフに 2 つのデスティネーションをリンクするアクションを含むデスティネーションがある場合に、まったく同じグラフで
setGraphを複数回呼び出すとバックスタックがポップされる問題を修正しました。(Ieaed7) - 連続して移動して閉じられたダイアログが
NavController.visibleEntriesのリストに漏洩しなくなります。(I67586、b/287969970) - エントリがポップされた後に構成が変更された場合、
saveStateが false であれば、エントリのViewModelが適切にクリアされるようになりました。(Idf242、b/298164648) - 構成の変更または
setGraphの呼び出しの前にバックスタックが完全に空の場合、着信 Intent にFLAG_ACTIVITY_NEW_TASKフラグが設定されている場合にのみ、NavControllerが同じディープリンクを複数回処理する問題を修正しました。(I73c7f)
依存関係の更新
- フラグメントを含む Navigation が Fragment 1.6.2 に依存するようになりました。これにより、
clearBackStackを呼び出したときにネストされたフラグメントのViewModelインスタンスがクリアされない問題が修正されます。
バージョン 2.7.4
バージョン 2.7.4
2023 年 10 月 4 日
androidx.navigation:navigation-*:2.7.4 がリリースされました。バージョン 2.7.4 に含まれる commit については、こちらをご覧ください。
新機能
popUpToで引数付きのルートを使用できるようになりました。これにより、popBackStackでサポートされているものと同様に、引数を使用して特定のエントリにポップバックできます。(I731f4、b/299255572)
バグの修正
popUpToを使用して別のナビゲートでナビゲートを中断すると、FragmentNavigatorがクラッシュする問題を修正しました。(I3c848、b/301887045)- システム バックボタンを押すと、表示された Fragment に合わせて
currentDestinationが正しく更新されない問題を修正しました。(Id0d6c、b/289877514) - 上のダイアログが閉じられると、
DialogFragmentライフサイクルがRESUMED状態に適切に移行するようになりました。(I88f0d、b/301811387)
バージョン 2.7.3
バージョン 2.7.3
2023 年 9 月 20 日
androidx.navigation:navigation-*:2.7.3 がリリースされました。バージョン 2.7.3 に含まれる commit については、こちらをご覧ください。
バグの修正
- フラグメントを含むナビゲーションで、
visibleEntriesリストに誤ったエントリが含まれる問題を修正しました。(I5caa9、b/288520638) - フローティング ウィンドウのデスティネーション(
Dialogs、Bottomsheetsなど)でRESUMEDライフサイクル コールバックが呼び出されない問題を修正しました。(I3b866、b/287505132)
バージョン 2.7.2
バージョン 2.7.2
2023 年 9 月 6 日
androidx.navigation:navigation-*:2.7.2 がリリースされました。バージョン 2.7.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation が Lifecycle
2.6.2に依存するようになり、rememberSaveableと Navigation Compose のNavHostの間のインタラクションが修正されました。これにより、プロセスの終了と再作成の後に、デスティネーションのrememberSaveable状態とViewModelが所有するSavedStateHandleインスタンスが適切に復元されるようになります。(b/298059596、b/289436035) - Navigation Compose で複数のダイアログを同時に表示したときに、部分的に隠れたダイアログ(最上部のダイアログ以外)が
STARTED状態ではなくCREATEDライフサイクル状態になる問題を修正しました。(aosp/2728520、b/289257213) - Navigation Compose で複数のダイアログを同時に表示しているときに、最上部のダイアログを閉じると、新しい最上部のダイアログが
RESUMEDに正しく移動せずにSTARTEDライフサイクル状態のままになる問題を修正しました。(aosp/2629401、b/286371387) - Navigation Safe Args は、タスクが実際に実行されていない場合、タスクをすぐにインスタンス化しなくなりました。(I0e385、b/260322841)
依存関係の更新
- Navigation Compose が Compose 1.5.1 に依存するようになりました。
バージョン 2.7.1
バージョン 2.7.1
2023 年 8 月 23 日
androidx.navigation:navigation-*:2.7.1 がリリースされました。バージョン 2.7.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- Compose を使用した Navigation で、
Scaffoldを使用するとLifecycle.State.DESTROYEDViewModelにアクセスしようとしてエラーが発生する問題を修正しました。(I1dc11、b/268422136)
バージョン 2.7.0
バージョン 2.7.0
2023 年 8 月 9 日
androidx.navigation:navigation-*:2.7.0 がリリースされました。バージョン 2.7.0 に含まれる commit については、こちらをご覧ください。
2.6.0 以降の重要な変更
Accompanist のアニメーション
AnimatedContent が安定したため、Accompanist Navigation Animation から Navigation Compose 自体にコードを戻すことができました。
つまり、AnimatedNavHost にあったカスタム トランジションの設定のサポートはすべて、NavHost で直接サポートされます。
Accompanist Navigation Animation にはこれ以上の変更は加えられません。また、Navigation Compose 自体に戻す方法に関するガイダンスとともに、まもなく正式に非推奨となります。ただし、最新の Accompanist アルファ版(0.31.2-alpha)をすでに使用している場合は、移行ガイドの逆の手順で、他の API の変更は必要ありません。(b/197140101)
バグの修正
- Navigation Compose の NavHost が、アクティビティが停止して再開した後でも、システムの [戻る] 呼び出しを正しくインターセプトするようになりました。(Icb6de、b/279118447)
依存関係の更新
- Navigation が Compose
1.1.0から1.5.0に依存するようになりました。
バージョン 2.7.0-rc01
2023 年 7 月 26 日
androidx.navigation:navigation-*:2.7.0-rc01 がリリースされました。バージョン 2.7.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
NavHostの一部として作成されたEnterTransitionラムダとExitTransitionラムダが、NavHostがコンポジションから削除された後もメモリに残る可能性がある問題を修正しました。(I893d0)
既知の問題
- Navigation 2.6.x には、popUpTo を使用してナビゲーションを行うと
IllegalArgumentExceptionが発生する可能性があるという問題があります。この例外は、こちらで説明されているように、グラフを再構築することで回避できる可能性があります。(b/287133013)
バージョン 2.7.0-beta02
2023 年 6 月 28 日
androidx.navigation:navigation-*:2.7.0-beta02 がリリースされました。バージョン 2.7.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation Compose で、
popUpToオプションを使用して移動するカスタム トランジションの正しい z オーダーが設定されるようになりました。(/Ib1c3a、b/285153947)
バージョン 2.7.0-beta01
2023 年 6 月 7 日
androidx.navigation:navigation-*:2.7.0-beta01 がリリースされました。バージョン 2.7.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation Compose の
NavHostが、ActivityがSTOPPEDおよびRESUMEDされた後でも、システムの [戻る] 呼び出しを正しくインターセプトするようになりました。(Icb6de、b/279118447)
バージョン 2.7.0-alpha01
2023 年 5 月 24 日
androidx.navigation:navigation-*:2.7.0-alpha01 がリリースされました。バージョン 2.7.0-alpha01 に含まれる commit については、こちらをご覧ください。
Accompanist のアニメーション
AnimatedContent が安定したため、Accompanist Navigation Animation から Navigation Compose 自体にコードを戻すことができました。
つまり、AnimatedNavHost にあったカスタム トランジションの設定のサポートはすべて、NavHost で直接サポートされます。
Accompanist Navigation Animation にはこれ以上の変更は加えられません。また、Navigation Compose 自体に戻す方法に関するガイダンスとともに、まもなく正式に非推奨となります。ただし、最新の Accompanist アルファ版(0.31.2-alpha)をすでに使用している場合は、移行ガイドの逆の手順で、他の API の変更は必要ありません。(b/197140101)
バグの修正
- Navigation
2.6.0-rc02以降: フラグメントの Navigation で、popUpToを使用して移動し、ビューを再作成せずにフラグメントをバックスタックからポップすると、システムの [戻る] が機能しなくなる問題を修正しました。(Ieb8d4、b/281726455)
依存関係の更新
- Navigation が Compose
1.5.0-beta01に依存するようになりました。
バージョン 2.6.0
バージョン 2.6.0
2023 年 6 月 7 日
androidx.navigation:navigation-*:2.6.0 がリリースされました。バージョン 2.6.0 に含まれる commit については、こちらをご覧ください。
2.5.0 以降の Navigation の重要な変更
NavBackStackEntryのargumentsと、OnDestinationChangedListenerに渡されるargumentsは、デスティネーションに移動したときに作成された不変の引数のコピーのみになりました。したがって、これらのバンドルに対する変更は、argumentsまたは他のOnDestinationChangedListenerインスタンスへの後続のアクセスには反映されません。NavDeepLinkが配列のデフォルト値をサポートするようになりました。これによりクエリ パラメータの繰り返しがサポートされ、引数の配列型にマッピングされます。NavTypeにもデフォルト メソッドが追加されました。デフォルト メソッドはオーバーライドして、2 つの解析値を結合できますNavTypeのカスタム サブクラスで、serializeAsValueをオーバーライドして String に値をシリアル化できるようになりました。これにより、シリアル化とシリアル化解除(parseValue経由)の両方をNavTypeクラスで完全にカプセル化できます。StringTypeがこのメソッドをオーバーライドして、指定のStringでUri.encodeを呼び出すようになりました。
2.5.0 以降の Navigation Compose の重要な変更
- コンポーザブルを
NavHostでプレビューする際、デフォルトで NavGraph のstartDestinationが表示されるようになりました。 NavController.popBackStack(route)、NavController.getBackStackEntry(route)、NavController.clearBackStack(route)がすべて、引数が部分的または完全に入力されたルートをサポートするようになりました。引数は、エントリの引数と完全に一致している必要があります。navDeepLinkKotlin DSL を使用して空のNavDeepLinkを作成しようとすると、ディープリンクには有効な URI、アクション、MIME タイプが必要であることを示す lint 警告が表示されます。
2.5.0 以降のフラグメントを使用したナビゲーションの重要な変更
NavHostFragmentは、システム [戻る] ボタン自体をインターセプトしなくなりました。これにより、基盤となるFragmentManagerがシステム バックを処理できるようになります。これにより、Fragment1.7.0-alpha01以降で、Android U デバイスにアプリ内予測型「戻る」アニメーションを提供できるようになります。- Fragment で Navigation を使用する場合、
FragmentManagerのバックスタックにフラグメントを追加するFragmentTransactionを手動で実行しようとすると、IllegalArgumentExceptionがスローされるようになりました。フラグメントは常にnavigate()API を介して追加する必要があります。 - ナビゲーション XML ファイルのアクティビティ要素における
app:data属性とapp:dataPattern属性で、プレースホルダとして正確な文字列${applicationId}を使用すると、インフレーション時にコンテキストのpackageNameがプレースホルダに自動設定されます。 FragmentNavigatorがNavBackStackEntriesの移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntryLifecycleは、フラグメントの特別なエフェクトの入力と終了が完了するまで待ってから最終的なLifecycle.Stateに移行するようになりました。DialogFragmentNavigatorがNavBackStackEntriesの移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntryLifecycleは、DialogFragmentLifecycleがDESTROYEDに移行するまで待ってから、DESTROYEDに移行するようになりました。NavHostFragmentで、onCreate()の後だけでなく、NavHostFragmentがFragmentManagerにアタッチされるとすぐにNavControllerを取得できるようになりました。- Navigation の動的機能モジュールのサポートが、詳細な Play Feature Delivery Library に依存するようになりました。
- Navigation Safe Args が Android Gradle プラグイン バージョン 7.3.0 に依存するようになりました。つまり、バージョン 7.3.0 以降のみに対応するようになりました。
2.5.0 以降の NavigationUI の重要な変更
- (
Menuなどにより)ナビゲーション グラフの ID をAppBarConfigurationに渡すとき、NavigationUIは、グラフ内のすべてのデスティネーションをトップレベル デスティネーションとして誤ってマークするのではなく、ナビゲーション グラフの開始デスティネーションのみをトップレベル デスティネーションとしてみなすようになりました。個々のデスティネーションの ID を渡す動作は変更されません。この機能は、AppBarConfigurationの新しいisTopLevelDestination関数を介して独自のコードでも利用できます。 - 上部のアプリバーと連動するように
NavigationUIに統合したsetupWithNavControllerで、これまでは自動生成されたリソースの整数値を出力していましたが、android:labelで検出されたReferenceType引数のR.string値を解析して文字列値に格納するようにしました NavigationUIが、選択したMenuItem経由で移動できなかった場合にログを提供するようになりました。
バージョン 2.6.0-rc02
2023 年 5 月 24 日
androidx.navigation:navigation-*:2.6.0-rc02 がリリースされました。バージョン 2.6.0-rc02 に含まれる commit については、こちらをご覧ください。
バグの修正
- フラグメントのナビゲーションで、
popUpToを使用してナビゲートし、ビューを再作成せずにバックスタックからフラグメントをポップすると、システムの [戻る] が機能しなくなる問題を修正しました。(Ieb8d4、b/281726455)
バージョン 2.6.0-rc01
2023 年 5 月 10 日
androidx.navigation:navigation-*:2.6.0-rc01 がリリースされました。バージョン 2.6.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- フラグメントを含む Navigation で、
onResume()ライフサイクル コールバックのpopUpToを使用してフラグメントを削除するとIllegalStateExceptionが発生する問題を修正しました。(I21884、b/279644470)
バージョン 2.6.0-beta01
2023 年 4 月 19 日
androidx.navigation:navigation-*:2.6.0-beta01 がリリースされました。バージョン 2.6.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
NavBackStackEntryにカスタムtoString実装が提供されるようになりました。(Iff00b)
バグの修正
- Fragment で Navigation を使用する場合、
FragmentManagerのバックスタックにフラグメントを追加するFragmentTransactionを手動で実行しようとすると、IllegalArgumentExceptionがスローされるようになりました。フラグメントは常にnavigate()API を介して追加する必要があります。(I6d38e) - 同じフレーム内でエントリを追加する
navigateとエントリを削除するpopBackStackがある場合、バックスタックの最上位のエントリは常にRESUMEDLifecycle.Stateに戻るようになります。(Id8067、b/276495952)
バージョン 2.6.0-alpha09
2023 年 4 月 5 日
androidx.navigation:navigation-*:2.6.0-alpha09 がリリースされました。バージョン 2.6.0-alpha09 に含まれる commit については、こちらをご覧ください。
バグの修正
- 無効なルートのチェックを修正し、
NavDestinationに null 許容でないNavArgumentが含まれている場合、このデスティネーションのルートには、null 許容でないNavArgumentと同じ名前の引数のプレースホルダが含まれている必要があります。(Ic62bf、b/274697949) Action/MimeTypeに基づくディープリンク ナビゲーションは、ナビゲーション オペレーションにAction/MimeTypeが一致するNavDestinationで必要な null 許容でないNavArgumentがない場合、失敗するようになります。(Ibfa17、b/271777424)NavControllerが前のグラフと同じルートとデスティネーションを持つグラフを設定すると、現在のグラフノードとバックスタック デスティネーションが新しいインスタンスに適切に置き換えられるようになりました。これにより、Navigation Compose で状態を保存せずにonLaunchSingleTopを使用したときに発生するクラッシュが修正されます。また、ルートグラフに関連付けられたデスティネーションに移動すると、バックスタックが誤ってビルドされるエラーも修正しました。(I5bc58、b/275258161、b/275407804)
バージョン 2.6.0-alpha08
2023 年 3 月 22 日
androidx.navigation:navigation-*:2.6.0-alpha08 がリリースされました。バージョン 2.6.0-alpha08 に含まれる commit については、こちらをご覧ください。
新機能
NavHostFragmentで、onCreate()の後だけでなく、NavHostFragmentがFragmentManagerにアタッチされるとすぐにNavControllerを取得できるようになりました。(Ic6382、b/220186282)
バグの修正
- null 許容でない引数を含むネストされたグラフをポップしたときの
NullPointerExceptionを修正しました。(6b3581、b/249988437) popUpToを使用してナビゲートした後でシステムの [戻る] を使用すると、NavControllerの状態が正しいエントリにポップアップします。(I3a8ec、b/270447657)FragmentNavigatorが、システムバックまたはpopBackStack()を介してバックスタックがポップされたときに、トランザクションがフラグメントにエフェクトを使用するかどうかに関係なく、エントリを適切にポップするようになりました。(I81bdf)- ナビゲーションを使用せずに
FragmentNavigatorのFragmentManagerにフラグメントを追加しても、クラッシュしなくなりました。(b17204、b/274167493)
依存関係の更新
- Navigation が Lifecycle
2.6.1に依存するようになりました。(586fe7) - Navigation が SavedState
1.2.1に依存するようになりました。(078e4e) - Navigation が ProfileInstaller
1.3.0に依存するようになりました。(512f0c)
バージョン 2.6.0-alpha07
2023 年 3 月 8 日
androidx.navigation:navigation-*:2.6.0-alpha07 がリリースされました。バージョン 2.6.0-alpha07 に含まれる commit については、こちらをご覧ください。
バグの修正
- ルートを受け取る
getBackStackEntry、popBackStack、clearBackStackの API バリアントで、null 許容引数と null 許容クエリ パラメータを含むルート パターンを受け取るようになりました(I22294、b/269302500) NavControllerからclearBackStack()を呼び出すと、クリアされたバックスタックに関連付けられたフラグメント マネージャーの保存された状態がクリアされない問題を修正しました。(Ic1cce、b/271190202)- 2.6.0-alpha06 で発生した回帰を修正しました。この回帰により、タブ間でシステムを使用して戻ると、
BottomNavigationViewの誤ったMenuItemがハイライト表示されていました。(I634f6、b/270447657) Animationを使用しているときにNavBackStackEntryが RESUMED 状態に移行しない原因となっていた 2.6.0-alpha06 の回帰を修正しました。(Ib3589、b/269646882)
バージョン 2.6.0-alpha06
2023 年 2 月 22 日
androidx.navigation:navigation-*:2.6.0-alpha06 がリリースされました。バージョン 2.6.0-alpha06 に含まれる commit については、こちらをご覧ください。
新機能
- コンポーザブルを
NavHostでプレビューする際、デフォルトで NavGraph のstartDestinationが表示されるようになりました。(I2b89f)
API の変更
NavControllernavigateのオーバーロードは、必ずメインスレッドで呼び出されるように、すべて@MainThreadアノテーションが付けられるようになりました。(I2c0b0、b/263427111)
バグの修正
- Dynamic Fragment Navigation の使用中に移動しようとしたときに発生するクラッシュを修正しました。(I3ee29、b/268360479)
- システムの [戻る] ボタンで別のフラグメントに移動する場合について、下部のバーが選択した項目に正しく更新されないバグを修正しました。(If559f、b/269044426)
既知の問題
- フラグメントで Navigation を使用している場合、
AnimationAPI を使用すると、NavBackStackEntryの Lifecycle がRESUMEDに到達しません。(b/269646882) - Fragment で Navigation を使用し、
BottomNavigationで移動する場合、複数のエントリを含むバックスタックを復元しようとすると、BottomMenuItemが正しく更新されません。(b/270447657) - Fragment で Navigation を使用する場合、状態を復元した後、フラグメントが
DESTROYEDのときにNavBackStackEntryLifecycleがDESTROYEDを取得しません。(b/270610768)
バージョン 2.6.0-alpha05
2023 年 2 月 8 日
androidx.navigation:navigation-*:2.6.0-alpha05 がリリースされました。バージョン 2.6.0-alpha05 に含まれる commit については、こちらをご覧ください。
新機能
NavController.popBackStack(route)、NavController.getBackStackEntry(route)、NavController.clearBackStack(route)がすべて、引数が部分的または完全に入力されたルートをサポートするようになりました。引数は、エントリの引数と完全に一致している必要があります。(Iebd28、Ic678c、I3b37b、b/257514373)FragmentNavigatorがNavBackStackEntriesの移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntryLifecycleは、フラグメントの特別なエフェクトの入力と終了が完了するまで待ってから最終的なLifecycle.Stateに移行するようになりました。(I3cb19、b/238686802)DialogFragmentNavigatorがNavBackStackEntriesの移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntryLifecycleは、DialogFragmentLifecycleがDESTROYEDに移行するまで待ってから、DESTROYEDに移行するようになりました。(I53ee5、b/261213893)
API の変更
NavigatorStateが、NavigatorにNavBackStackEntriesを中間のLifecycle.Stateに移行することを認めるprepareForTransitionAPI を提供するようになりました。(I42c21、b/238686802)backstackプロパティを介してNavGraphNavigatorまたはComposeNavigatorと関連付けられているバックスタックにアクセスできるようになりました。移動またはpopBackStackオペレーションを実行したNavBackStackEntryを完了としてマークするために、ComposeNavigatorはonTransitionComplete()コールバックも公開するようになりました。(I02062、I718db、b/257519195)
バグの修正
push/popWithTransitionAPI を使用していて、エントリがすでに処理されている場合、Navigator のステータスが no-op になるようにしました。(Iadbfa、b/261213893)NavGraphをネストしてlaunchSingleTopを使用する場合、元のデスティネーションからそのstartDestinationまでのすべてのデスティネーションのみが、バックスタックの一番上に適切に追加されるようになりました。(Id4bea、b/253256629)- 同じデスティネーションに移動し、
launchSingleTopフラグを true に設定した際に、Navigation によってDialogFragmentインスタンスが適切に置き換えられるようになりました。(I45b5a、b/149572817) - 長さが 19 文字ちょうどの引数を使用した場合に、Navigation SafeArgs でコンパイル エラーが発生しなくなりました。(Id60bc、b/257110095)
バージョン 2.6.0-alpha04
2022 年 11 月 9 日
androidx.navigation:navigation-*:2.6.0-alpha04 がリリースされました。バージョン 2.6.0-alpha04 に含まれる commit については、こちらをご覧ください。
新機能
NavTypeのカスタム サブクラスで、serializeAsValueをオーバーライドして String に値をシリアル化できるようになりました。これにより、シリアル化とシリアル化解除(parseValue経由)の両方をNavTypeクラスで完全にカプセル化できます。StringTypeがこのメソッドをオーバーライドして、指定のStringでUri.encodeを呼び出すようになりました。(Ie5213、b/247637434)NavigationUIが、選択したMenuItem経由で移動できなかった場合にログを提供するようになりました。(I2af5a、b/247730357)
バグの修正
- Navigation のディープリンクが、グラフの初期化時ではなく遅延的に解析されるようになりました。これにより、アプリの起動時のパフォーマンスを改善できることがあります。(Iab0ab)
- null のデフォルト引数を使用して特定のデスティネーションにディープリンクした場合について、上に移動するとクラッシュする問題を修正しました。(I51c24、b/243183636)
依存関係の更新
- Navigation の動的機能モジュールのサポートが、詳細な Play Feature Delivery Library に依存するようになりました。(Ib4ddc)
- Navigation Safe Args が Android Gradle プラグイン バージョン 7.3.0 に依存するようになりました。つまり、バージョン 7.3.0 以降のみに対応するようになりました。(I47e49)
バージョン 2.6.0-alpha03
2022 年 10 月 24 日
androidx.navigation:navigation-*:2.6.0-alpha03 がリリースされました。バージョン 2.6.0-alpha03 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation
2.5.3以降:Crossfadeの作成のためのデスティネーションがない場合、NavHostでNoSuchElementExceptionが発生しなくなりました。単にコンポジションをスキップするようになりました。(Ieb46e、b/253299416) - Navigation
2.5.3以降: 保存された Compose の状態(rememberSaveableの使用状況など)が破棄されず、デスティネーションがバックスタックからポップされたときに削除される問題を修正しました。(I64949)
依存関係の更新
- Navigation が Fragment
1.5.4に依存するようになりました。(Icd424)
バージョン 2.6.0-alpha02
2022 年 10 月 5 日
androidx.navigation:navigation-*:2.6.0-alpha02 がリリースされました。バージョン 2.6.0-alpha02 に含まれる commit については、こちらをご覧ください。
動作の変更
- (
Menuなどにより)ナビゲーション グラフの ID をAppBarConfigurationに渡すとき、NavigationUIは、グラフ内のすべてのデスティネーションをトップレベル デスティネーションとして誤ってマークするのではなく、ナビゲーション グラフの開始デスティネーションのみをトップレベル デスティネーションとしてみなすようになりました。個々のデスティネーションの ID を渡す動作は変更されません。この機能は、AppBarConfigurationの新しいisTopLevelDestination関数を介して独自のコードでも利用できます。(Ie936e、b/238496771)
バグの修正
navigation:navigation-fragmentコンポーネントが、Fragment バージョン1.5.2に依存するようになりました。(I00ba4)- ダイアログなどの
FloatingWindowデスティネーションに移動したときに、選択したメニュー項目が更新されなくなります。(I4cde8、b/240308330)
バージョン 2.6.0-alpha01
2022 年 9 月 7 日
androidx.navigation:navigation-*:2.6.0-alpha01 がリリースされました。バージョン 2.6.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
- 上部のアプリバーと連動するように
NavigationUIに統合したsetupWithNavControllerで、これまでは自動生成されたリソースの整数値を出力していましたが、android:labelで検出されたReferenceType引数のR.string値を解析して文字列値に格納するようにしました(I5f803、b/167959935)。 NavDeepLinkが配列のデフォルト値をサポートするようになりました。これによりクエリ パラメータの繰り返しがサポートされ、引数の配列型にマッピングされます。NavTypeにもデフォルト メソッドが追加されました。デフォルト メソッドはオーバーライドして、2 つの解析値を結合できます(Id68c3、b/209977108)。- ナビゲーション XML ファイルのアクティビティ要素における
app:data属性とapp:dataPattern属性で、プレースホルダとして正確な文字列${applicationId}を使用すると、インフレーション時にコンテキストのpackageNameがプレースホルダに自動設定されます(Iaabde、b/234223561)。 navDeepLinkKotlin DSL を使用して空のNavDeepLinkを作成しようとすると、ディープリンクには有効な URI、アクション、MIME タイプが必要であることを示す lint 警告が表示されます(I08d2f、b/154038883)。
API の変更
- 新たに
NavDestination拡張関数を追加しました。この関数では、android:label="{arg}"という形式の引数を使用して動的ラベルを解析し、文字列に格納します。R.string値を解析して文字列値に格納することで、ReferenceType引数をサポートします(I07d89、b/236269380)。
動作の変更
- NavBackStackEntry の
argumentsと、OnDestinationChangedListenerに渡されるargumentsは、デスティネーションに移動したときに作成された不変の引数のコピーのみになりました。したがって、これらのバンドルに対する変更は、argumentsまたは他のOnDestinationChangedListenerインスタンスへの後続のアクセスには反映されません(I676f5)。
バグの修正
- Navigation
2.5.2以降: Dynamic Navigation は、他のモジュールに移動する前に、他のモジュールからアクティビティのデスティネーションを正しくインストールするようになりました(Ia2c16、b/240292838)。 - Navigation
2.5.2以降: 同じデスティネーションに移動し、launchSingleTopフラグを true に設定した際に、Fragment インスタンスを適切に置き換えるようになりました(I5a2f1、b/237374580)。 - Navigation
2.5.2以降: 新たにポップされた開始デスティネーションと親グラフを共有する、二重にネストされたグラフに移動する際にIllegalStateExceptionが発生しないように修正しました(I9f7cb、b/243778589)。
バージョン 2.5
バージョン 2.5.3
2022 年 10 月 24 日
androidx.navigation:navigation-*:2.5.3 がリリースされました。バージョン 2.5.3 に含まれる commit については、こちらをご覧ください。
バグの修正
Crossfadeの作成のためのデスティネーションがない場合、NavHostでNoSuchElementExceptionが発生しなくなりました。単にコンポジションをスキップするようになりました。(Ieb46e、b/253299416)- 保存された Compose の状態(
rememberSaveableの使用状況など)が破棄されず、デスティネーションがバックスタックからポップされたときに削除される問題を修正しました。(I64949)
バージョン 2.5.2
2022 年 9 月 7 日
androidx.navigation:navigation-*:2.5.2 がリリースされました。バージョン 2.5.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- Dynamic Navigation は、他のモジュールに移動する前に、他のモジュールからアクティビティのデスティネーションを正しくインストールするようになりました(Ia2c16、b/240292838)。
- 同じデスティネーションに移動し、
launchSingleTopフラグを true に設定した際に、Fragment インスタンスを適切に置き換えるようになりました(I5a2f1、b/237374580)。 - 新たにポップされた開始デスティネーションと親グラフを共有する、二重にネストされたグラフに移動する際に
IllegalStateExceptionが発生しないように修正しました(I9f7cb、b/243778589)。
依存関係の更新
- Navigation
2.5.2が Fragment1.5.2に依存するようになりました(aosp/2178734)。
バージョン 2.5.1
2022 年 7 月 27 日
androidx.navigation:navigation-*:2.5.1 がリリースされました。バージョン 2.5.1 に含まれる commit については、こちらをご覧ください。
バグの修正
Bundleに保存されているカスタム引数の型を使用する場合、生成されるクラスでの非推奨警告がNavigation Safe Argsで発生しなくなりました。(Id86ed、b/237725966)
依存関係の更新
- Navigation ライブラリは Lifecycle
2.5.1に依存するようになりました。(Ib4451) - Navigation ライブラリは Activity
1.5.1に依存するようになりました。(I3efe8) - Navigation ライブラリは Fragment
1.5.1に依存するようになりました。(I56177)
バージョン 2.5.0
2022 年 6 月 29 日
androidx.navigation:navigation-*:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください。
2.4.0 以降の重要な変更
- CreationExtras の統合 -
Navigationが Lifecycle2.5.0のCreationExtrasを介して、ステートレスのViewModelProvider.Factoryを提供できるようになりました。
Navigation SafeArgs
Navigation Safe ArgsがAndroid Gradle Pluginの依存関係をアップグレードして、7.0.4に依存するようになりました。これにより、7.0より前の AGP バージョンの互換性が失われます。- applicationId の代わりに使用できる namespace build.gradle 属性のサポートを追加しました。
その他の変更点
visibleEntriesAPI は試験運用版ではなくなり、NavControllerに従ってデスティネーションが現在表示されているすべてのエントリを取得する関数が提供されます。
バージョン 2.5.0-rc02
2022 年 6 月 15 日
androidx.navigation:navigation-*:2.5.0-rc02 がリリースされました。バージョン 2.5.0-rc02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation Compose
NavHostの使用時に下部のデスティネーションをすばやく切り替えることで起きていたクラッシュを修正しました。(I3979a、b/234054916) applicationIdが含まれていないapplicationIdSuffixと名前空間を使用している場合、またはapplicationIdと名前空間が異なる場合に、Navigation SafeArgsがクラッシュすることがなくなりました。(I754b1、b/233119646)- 引数の内部値を表示するカスタム
toString()関数がNavArgumentに追加されました。(I900a8)
バージョン 2.5.0-rc01
2022 年 5 月 11 日
androidx.navigation:navigation-*:2.5.0-rc01 がリリースされました。バージョン 2.5.0-rc01 に含まれる commit については、こちらをご覧ください。
新機能
navigation.xmlファイルの<activity>要素内に<deeplink>要素を配置した場合に警告する新しい lint ルールを追加しました。(Ic15a5、b/178403185)
バグの修正
NavHostとDialogHostのコンポーザブルのスコープは、想定される順序で破棄されるようになりました。具体的には、内部コンポーザブルが外部コンポーザブルより前に破棄されます。(I157e6)- Navigation SafeArgs が
ArgumentsGenerationTaskでPathSensitivity.RELATIVEを使用するようになり、キャッシュの再配置が可能になりました。そのため、キャッシュ エントリを CI ビルドからローカルビルドに再利用できます。(I5f67c、b/173420454) UnrememberedGetBackStackEntryDetectorlint ルールが更新され、getBackStackEntry()の呼び出しを囲むremember呼び出しもキーとしてNavBackStackEntryオブジェクトを渡すようになりました。(Ib7081、b/227382831)
バージョン 2.5.0-beta01
2022 年 4 月 20 日
androidx.navigation:navigation-*:2.5.0-beta01 がリリースされました。バージョン 2.5.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
DialogNavigatorは、dismiss()の呼び出し時にpopWithTransitionを使用するようになりました。これにより、dialogデスティネーションでViewModelを使用した場合に発生していた競合状態が修正されました。この競合状態により、システムを使用して戻るか、ダイアログの外側をタップするかしてダイアログを閉じるとIllegalStateExceptionが発生していました。(Id7376、b/226552301)
依存関係の更新
- Navigation が Lifecycle
2.5.0-beta01に依存するようになりました。これにより、複数のバックスタックを使用しているときに、メインでない下部のナビゲーション タブでNavHostを別のNavHostにネストすると発生していたIllegalStateExceptionが修正されました。
バージョン 2.5.0-alpha04
2022 年 4 月 6 日
androidx.navigation:navigation-*:2.5.0-alpha04 がリリースされました。バージョン 2.5.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
visibleEntriesは試験運用版ではなくなりました。(I4829f、b/225394514)
バグの修正
- NavHost が、コンポーズするエントリを決定する際に、
NavControllerのvisibleEntriesに依存するようになりました。つまり、ネストされた NavHost を使用すると、内部NavHostが適切にアニメーション化されるようになりました。(I4ba2b、b/225394514) NavControllerによって提供されるvisibleEntriesStateFlowが、現在の Lifecycle 状態ではなく、エントリの最大 Lifecycle 状態に基づくようになりました。つまり、navControllerのホスト ライフサイクルが STARTED に達しなくても、表示されるエントリのリストは同じままです。(I9e2a8、b/225394514)SavedStateViewFactoryが、SavedStateRegistryOwnerで初期化された場合でもCreationExtrasを使用できるようになりました。エクストラが指定されている場合、初期化された引数は無視されます。(I6c43b、b/224844583)NavDeepLinkが、値のない単一のクエリ パラメータを含む URI を解析できるようになりました。(I0efe8、b/148905489)- ディープリンクで、空の文字列が有効な引数と見なされるようになりました。(I70a0d、b/217399862)
- 名前空間の使用時に
AndroidManifest.xmlが存在しない場合に、Navigation Safe Argsがクラッシュすることがなくなりました。(I17ccf、b/227229815)
バージョン 2.5.0-alpha03
2022 年 2 月 23 日
androidx.navigation:navigation-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
CreationExtrasをby navGraphViewModelsに渡してViewModelを作成できるようになりました。(I29217、b/217618359)
バグの修正
- ルート / ディープリンク URI に埋め込まれたエンコード済みの改行文字が、
NavDeepLinksで適切にサポートされるようになりました。(I513d1、b/217815060) CreationExtrasが、NavBackStackEntriesとともに使用して ViewModel を作成するときに正しく機能するようになりました。(I69161、b/217617710)- Navigation Safe Args が、AndroidManifest でパッケージの代わりに
build.gradleで定義された名前空間を使用できるようになりました。(I659ef、b/217414933)
バージョン 2.5.0-alpha02
2022 年 2 月 9 日
androidx.navigation:navigation-*:2.5.0-alpha02 がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation
2.4.1以降: ネストされたグラフでビュー バインディングを使用している場合に、NavHostFragmentでOnBackPressedDispatcherが適切に設定されるようになりました。(Ifbb51、b/214577959) - Navigation
2.4.1以降: ネストされた複数のNavGraphを介してディープリンクする際に、バックスタックに中間の開始デスティネーションが適切に含まれるようになりました。(I504c0、b/214383060)
バージョン 2.5.0-alpha01
2022 年 1 月 26 日
androidx.navigation:navigation-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
NavBackStackEntryが、Lifecycle2.5.0-alpha01の一部として導入された ViewModel CreationExtras と統合されました。(Ib9fe2、b/207012490)
バグの修正
by navGraphViewModels()を介して作成されたViewModelに Fragment のonCreate()からアクセスするとIllegalStateExceptionで失敗する問題を修正しました。(I8a14d)NavDeepLinkが引数を不必要に 2 回デコードしなくなりました。つまり、適切な引数が最終デスティネーションに渡されるようになりました。(I31b0a、b/210711399)
Safe Args
- Safe Args は Android Gradle プラグイン バージョン 7.0.4 に依存するようになりました。つまり、Navigation Safe Args は 7.0 より前のバージョンの Android Studio とは互換性がなくなりますが、Android Gradle プラグイン 7.1.0 以上と互換性を持つようになります。(I41c88、b/213086135、b/207670704)
バージョン 2.4.2
バージョン 2.4.2
2022 年 4 月 6 日
androidx.navigation:navigation-*:2.4.2 がリリースされました。バージョン 2.4.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation
2.5.0-alpha03からバックポート: ルート / ディープリンク URI に埋め込まれたエンコード済みの改行文字が、NavDeepLinksで適切にサポートされるようになりました。(I513d1、b/217815060) - Navigation
2.5.0-alpha03からバックポート: Navigation SafeArgs が、AndroidManifest でパッケージの代わりにbuild.gradleで定義された名前空間を使用できるようになりました。(I659ef、b/217414933) - Navigation
2.5.0-alpha04からバックポート: 名前空間の使用時にAndroidManifest.xmlが存在しない場合に、Navigation Safe Argsがクラッシュすることがなくなりました。(I17ccf、b/227229815) - Navigation
2.5.0-alpha04からバックポート: ディープリンクで、空の文字列が有効な引数と見なされるようになりました。(I70a0d、b/217399862)
バージョン 2.4.1
バージョン 2.4.1
2022 年 2 月 9 日
androidx.navigation:navigation-*:2.4.1 がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- ネストされたグラフでビュー バインディングを使用している場合に、
NavHostFragmentでOnBackPressedDispatcherが適切に設定されるようになりました。(Ifbb51、b/214577959) - ネストされた複数の
NavGraphを介してディープリンクする場合に、バックスタックに中間の開始デスティネーションが適切に含まれるようになりました。(I504c0、b/214383060) - Navigation
2.5.0-alpha01からバックポート: Fragment のonCreate()からby navGraphViewModels()を介して作成された ViewModel にアクセスすると、IllegalStateExceptionで失敗する問題を修正しました。(I8a14d) - Navigation
2.5.0-alpha01からバックポート:NavDeepLinkが引数を不必要に 2 回デコードしなくなりました。つまり、適切にデコードされた引数が最終デスティネーションに渡されるようになりました。(I31b0a、b/210711399) - Navigation
2.5.0-alpha01からバックポート: Safe Args は Android Gradle プラグイン バージョン 7.0.4 に依存するようになりました。つまり、Navigation Safe Args は 7.0 より前のバージョンの Android Studio とは互換性がなくなりますが、Android Gradle プラグイン 7.1.0 以上と互換性を持つようになります。(I41c88、b/213086135、b/207670704)
バージョン 2.4.0
バージョン 2.4.0
2022 年 1 月 26 日
androidx.navigation:navigation-*:2.4.0 がリリースされました。バージョン 2.4.0 に含まれる commit については、こちらをご覧ください。
2.3.0 以降の重要な変更
- すべての Navigation アーティファクトが Kotlin で書き直されました。これにより、ジェネリクスを使用するクラス(
NavTypeサブクラスなど)の null 可能性が改善されました。これまで-ktxアーティファクトに含まれていたすべての Kotlin 拡張関数は、それぞれのメイン アーティファクトに移動されました。-ktxアーティファクトは引き続き公開されますが、完全に空になっています。 navigation-fragmentアーティファクトに、新しいAbstractListDetailFragmentによる 2 ペイン レイアウトのビルド済み実装が追加されました。このフラグメントは、実装例に示されているように、SlidingPaneLayoutを使用してリストペイン(サブクラスによって提供されます)と詳細ペイン(NavHostFragmentを実装として使用します)を管理します。NavControllerのcurrentBackStackEntryAsFlow()メソッドは、現在のNavBackStackEntryが変更されるたびに出力するFlowを提供します。このフローは、OnDestinationChangedListenerを手動で管理する代わりに使用できます。- NavController で、試験運用版の
visibleEntriesプロパティを介して、すべての表示可能なNavBackStackEntryインスタンスのリストをStateFlowとして取得できるようになりました。 NavTypeクラスを拡張してカスタムの NavType を作成できるようになりました。カスタム型がサポートされるのは、ナビゲーション グラフ Kotlin DSL などを使用してプログラムでナビゲーション グラフを作成する場合に限られます。Navigation に、カスタム NavigationUI の実装に役立つ
findStartDestination()API とgetHierarchy()API が追加されました。findStartDestination()はNavGraphの拡張関数です。startDestination自体がネストされたNavGraphであっても、グラフに移動したときに表示される実際の開始デスティネーションを見つけます。getHierarchy()は、NavDestinationの関数です。指定されたデスティネーションが別のデスティネーションの階層にあるかどうかを確認できます。val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }BottomNavigationViewを受け取るNavigationUIメソッドが更新され、代わりに Material1.4.0、NavigationBarViewで導入されたスーパークラスを受け取るようになりました。これによりNavigationRailViewとともに使用できるようになります。XML から
<action>要素をインフレートする場合に、アニメーション属性で、app:enterAnim="?attr/transitionEnter"構文を使用してテーマから取得した属性を使用できるようになりました。Safe Args が
NavArgsクラスごとにfromSavedStateHandle()メソッドを生成するようになりました。(#122、b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
ナビゲーション ルートと Kotlin DSL
以前のバージョンの Navigation は、各デスティネーションが兄弟デスティネーションの中で一意の整数定数 ID を持つことを利用して、そのデスティネーションへの直接の、またはアクションを介した navigate() を可能にしていました。この仕組みは引き続き有効で、特にナビゲーション グラフを XML で定義していて、自動生成された R.id 定数または Safe Args(この定数を使用してビルド時にコードを生成する)を使用できる場合には有用です。しかし、ランタイムに Navigation Kotlin DSL によってプログラマティックに作成される完全に動的なグラフをサポートするには、一意の整数の仕組みでは意味論的意味と表現力を把握できませんでした。
今回のリリースでは、ナビゲーション グラフ内のデスティネーションを一意に識別するためにルートを使用するという新たな方法を導入しました。ルートとは、デスティネーションへの一意のパスを定義する String です。これに伴い、デスティネーション ID を受け取るすべての Kotlin DSL メソッドは非推奨となり、ルートを受け取る同等の API に置き換えられました。
各ルートは、そのデスティネーションを定義する Uri の「パス」部分のように扱われます(例: home、profile/{userId}、profile/{userId}/friends など)。デスティネーションの ID が特定のコンテンツ部分に関連付けられている場合は、暗黙的ディープリンクと同じルールに則ってその動的引数をルートに含める必要があります。
ID のみを受け取っていたすべての NavController API に、ルート String を受け取るオーバーロードが追加されました。これには、navigate()、popBackStack()、popUpTo()、getBackStackEntry() が含まれます。
これにより、一部の API が次のように影響を受けます。
- Kotlin DSL の
popUpToKotlin プロパティは非推奨になりました。popUpToIdの使用をおすすめします。 getStartDestination()API は非推奨になりました。getStartDestinationId()の使用をおすすめします。
ID によるナビゲーションとは異なり、ルートによるナビゲーションは暗黙的ディープリンクと同じルールに従います。つまり、ネストされたグラフ内の任意のデスティネーションに直接移動でき、そのルートは、デスティネーションに対する外部から表示可能なディープリンクを明示的に追加することなく、マルチモジュール プロジェクトで確実に利用できます。
Navigation Compose
navigation-compose アーティファクトは、Navigation コンポーネントと Jetpack Compose との統合を提供します。アプリ内のデスティネーションとして @Composable 関数を使用します。
今回のリリースでの変更点は以下のとおりです。
composableとdialogのデスティネーションを使用して Kotlin DSL でナビゲーション グラフを作成できるNavHostコンポーザブル、および Accompanist Navigation Material の Navigator など、オプションの Navigator のサポートが追加されました。- デスティネーション間のクロスフェードが強制的にサポートされます。Accompanist Navigation Animation を使用すると、試験運用版の Compose API を使用して開始遷移と終了遷移を制御できます。
- 各コンポーザブル デスティネーションに対する
Lifecycleのスコープ設定。各デスティネーションは、いずれかの開始遷移が終了したときにのみRESUMED状態に到達し、いずれかの既存遷移が開始されるとすぐにSTARTED状態になります。したがって、LifecycleがRESUMEDのときにnavigate呼び出しをトリガーするだけで、IllegalStateExceptionとマルチタッチの問題をすべて回避できます。 - デスティネーション レベルでの
ViewModelのスコープ設定(Lifecycle ViewModel Compose2.4.0のviewModel()API または Hilt Navigation Compose1.0.0のhiltViewModel()を介した)により、構成変更で破棄されず、別の理由で破棄された場合にはバックスタックに保持されるスコープが提供されます。また、NavBackStackEntryに関連付けられた状態が完全に破棄されクリーンアップされたことを示す ViewModel のonCleared()のシグナルも提供されます。 - デスティネーション レベルでの
rememberSaveableの状態のスコープ設定により、デスティネーションに戻るときにすべてのコンポーザブルの状態が自動的に保存および復元されます。 - プロセスの終了および再作成後の
NavControllerの状態とそのデスティネーションの状態の保存および復元を完全にサポートしました。 - システムの [戻る] ボタンとの自動統合。
引数を受け渡す、デスティネーションにディープリンクを追加する、以前のデスティネーションに結果を返す機能のサポート。
状態のホイストや、
NavHostの外部にある composable(ボトム ナビゲーション バーなど)へのNavControllerの接続を可能にする、rememberNavController()およびcurrentBackStackEntryAsState()内の Compose 固有のヘルパー。
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
詳しくは、Compose でのナビゲーションについてのガイドをご覧ください。
複数のバックスタック
NavController は、デスティネーションのバックスタックを管理する責任を負っていて、navigate() でデスティネーションに移動する際にバックスタックにそのデスティネーションを追加し、popBackStack() が呼び出されるか、システムの [戻る] ボタンがトリガーされたときにデスティネーションを削除します。既存の NavOptions クラスとナビゲーション グラフ XML の <action> 要素の統合が拡張され、バックスタックの保存と復元をサポートしました。
この変更の一環として、onNavDestinationSelected()、BottomNavigationView.setupWithNavController()、NavigationView.setupWithNavController() の NavigationUI メソッドは、ポップされたデスティネーションの状態を自動的に保存および復元するようになりました。これにより、コードを変更せずに複数のバックスタックをサポートできるようになりました。Fragment で Navigation を使用する場合、複数のバックスタックとの統合には、この方法をおすすめします。
状態の保存と復元の基盤となる API は、次のようなサーフェスから公開されています。
Navigation XML の
<action>要素で、app:popUpToSaveStateとapp:restoreStateのブール値属性を使用して、app:popUpToでポップされたデスティネーションの状態を保存し、app:destinationとして渡されたデスティネーションと関連付けられた状態を復元できるようになりました。<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />navOptionsKotlin DSL では、popUpToビルダーにrestoreStateブール値プロパティとsaveStateブール値プロパティを追加できます。// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }NavOptions.BuilderでNavOptionsオブジェクトを手動で作成する場合は、setRestoreState()と、追加のsaveStateパラメータをとるsetPopUpTo()の新しいオーバーロードを使用できます。NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);プログラムによる
popBackStack()の呼び出しに、saveStateパラメータを追加できるようになりました。clearBackStack()メソッドを使用して、popBackStack()またはpopUpToSaveStateで保存された状態を消去できるようになりました。
いずれの場合も、NavController は各 NavBackStackEntry の状態を保存および復元します。これには、すべてのナビゲーション デスティネーションにスコープ設定された ViewModel インスタンスが含まれます。Navigator API が更新され、各 Navigator が独自の状態の保存と復元をサポートするようになりました。
動作の変更
NavDeepLinkBuilderで、createPendingIntent()から返されたPendingIntentにPendingIntent.FLAG_IMMUTABLEが追加され、Android 12 をターゲットとしたときにこの API が期待どおりに機能するようになりました。- Navigation は Lifecycle
2.3.1に依存するようになり、setGraph()、popBackStack()、navigateUp()、navigate()(NavBackStackEntryLifecycleを更新するメソッド)を@MainThreadとマークすることで、Lifecycle2.3.0で導入されたメインスレッド強制に対応しました。 - ディープリンクが、すべての必須の引数(デフォルト値のない引数)が
Uriに存在することを確認するようになりました。 NavDeepLinkの解析された引数で、疑問符と同じようにポンド記号もパスセグメントの区切り文字と見なされるようになりました。これにより、1 つの引数がポンド記号をまたぐことを防ぎます。- アクションを生成するとき、Safe Args から生成された Kotlin コードが、デフォルト値のある引数の前にデフォルト値のない引数をパラメータとして置くようになりました。
- Safe Args は引数を生成する際、デフォルト値のないパラメータを、デフォルト値のある引数のパラメータの前に置くようになりました。
- Safe-Args は、Android Gradle プラグイン 4.2.0 に依存するようになりました。これによって、
applicationIdTextResourceの使用に関する警告が表示されなくなります。
既知の問題
- Navigation
2.5.0-alpha01で修正: Fragment のonCreate()からby navGraphViewModels()を介して作成されたViewModelにアクセスすると、IllegalStateExceptionで失敗する。(b/213504272) - Navigation
2.5.0-alpha01で修正: Safe Args 2.4.0 と Android Gradle プラグイン 7.1.0 以降との互換性がない。(b/213086135) - 多重にネストされたナビゲーション グラフを使用したディープリンクからは、完全なバックスタックが正しく作成されない。(b/214383060)
バージョン 2.4.0-rc01
2021 年 12 月 15 日
androidx.navigation:navigation-*:2.4.0-rc01 がリリースされました。バージョン 2.4.0-rc01 に含まれる commit については、こちらをご覧ください。
動作の変更
NavDeepLinkの解析された引数で、疑問符と同じようにポンド記号も引数の区切り文字と見なされるようになりました。(I21309、b/180042703)
バグの修正
- ディープリンクで、プレースホルダの名前と同じ値を持つ引数が無視されなくなりました。(If8017、b/207389470)
NavControllerの復元後に遷移を使用してネスト デスティネーションをポップしても、NavControllerがクラッシュしなくなりました。(I0f7c9、b/205021623)- 無効な
startDestinationを使用しているときのエラー メッセージで、開始デスティネーションのルートが利用可能な場合、デフォルトでそのルートが指定されるようになりました。(I86b9d、b/208041894)
Navigation Compose のバグの修正
- ボトム ナビゲーション メニュー項目を使用して、開始デスティネーションと別のデスティネーションをすばやく切り替えるとクラッシュが発生する問題を修正しました。(Ic8976、b/208887901)
- 構成の変更やプロセスの終了後、ダイアログ デスティネーションが画面上部に適切に復元されるようになりました。(I4c0dc、b/207386169)
- ダイアログの
NavBackStackEntryからViewModelを取得しようとしているときにダイアログを閉じると失敗する問題を修正しました。(I6b96d、b/206465487) - Navigation Compose の
NavHostでactivityのデスティネーションを使用する際、再コンポーズが無限に繰り返される問題を修正しました。(I8f64c) - 構成の変更やプロセスの終了後に古いアクティビティの参照を保持していた、Navigation Compose のリークを修正しました。(I4efcb、b/204905432)
Safe Args のバグの修正
- プロセスの終了後にカスタムの Parcelable 配列を復元しようとしても、
SafeArgsがクラッシュすることがなくなりました。(I618e8、b/207315994) - ブール値の配列で
null値が許可されない Safe Args のバグを修正しました。(I8c396、b/174787525)
バージョン 2.4.0-beta02
2021 年 11 月 3 日
androidx.navigation:navigation-*:2.4.0-beta02 がリリースされました。バージョン 2.4.0-beta02 に含まれる commit については、こちらをご覧ください。
API の変更
- 明示的ディープリンクと暗黙的ディープリンクの両方を処理すると、別のグラフに移動するときに
saveStateフラグが自動的に追加され、NavigationUI.setupWithNavControllerなどのコードと複数のバックスタックを使用するコードが想定どおりに機能するようになりました。(Ic8807)
動作の変更
- ディープリンクのパターンが、インフレート中ではなく、NavDeepLink で遅延コンパイルされるようになりました。これにより、ディープリンクを含むナビゲーション グラフのインフレート時間が短縮されます。(b8d257、b/184149935)
バグの修正
NavHostがアクティビティのsetContent()に直接追加されると、Lifecycle.State.STARTEDに移動した後、NavBackStackEntry がLifecycle.State.CREATEDに push される問題を修正しました。(Ia5ac1、b/203536683)- ダイアログが実際に表示される前にバックスタックから
DialogFragmentデスティネーションをポップすると、ダイアログが実際には閉じられず、エラーが発生したダイアログがユーザーによって手動で閉じられた場合にクラッシュする競合状態を修正しました。(I687e5) NavigationUIのonNavDestinationSelectedAPI が、実際にはナビゲーション グラフにnavigate()を使用していない場合でもtrueを返す問題を修正しました。setupWithNavControllerが内部で使用するのと同じロジックを使用して、デスティネーションのhierarchyを使用する現在のデスティネーションに関連付けられたMenuItemのみを選択するようになりました。(I2b053)
バージョン 2.4.0-beta01
2021 年 10 月 27 日
androidx.navigation:navigation-*:2.4.0-beta01 がリリースされました。バージョン 2.4.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
- ID を使用する代わりにルートを含む
by navGraphViewModelを使用することで、フラグメントを使った Navigation Kotlin DSL をより適切にサポートできるようになりました。(I901e3, b/201446416)
API の変更
visibleEntriesAPI が試験運用版になりました。(I93f6f)
バグの修正
- 同じ画面間を移動することで遷移が中断されても、ViewModel が破棄されなくなりました(Id52d8、b/200817333)
NavDestinationにディープリンクを追加するときに、null 許容のNavDeepLink引数にデフォルト値が不要になりました。(I5aad4、b/201320030)- ライフサイクルが異なる NavBackStackEntry が等しいとみなされなくなりました。つまり、NavHost は、singleTop でナビゲーションを行う場合や、下部のメニュー項目を再選択する場合に、すべてのデスティネーションを適切に再コンポーズします。(I1b351、b/196997433)
onCreateListPaneView()によって返されるリストペインのlayout_width属性とlayout_weight属性が正しく処理されない、または無視されるAbstractListDetailFragmentの問題を修正しました。(f5fbf3)- ダイアログ デスティネーションの表示状態が正しく
DialogFragmentNavigatorの状態と同期されるようになりました。つまり、DialogFragmentの非同期のdismiss()API を手動で呼び出すと、拒否されたダイアログの上にあるすべてのダイアログ デスティネーションが適切にクリアされるようになりました。これは、popUpToまたはpopBackStack()を使用してダイアログを閉じるケースには影響しません。(I77ba2) AbstractAppBarOnDestinationChangedListenerでonDestinationChanged()のエラー メッセージがより明確になりました。(Ie742d)
バージョン 2.4.0-alpha10
2021 年 9 月 29 日
androidx.navigation:navigation-*:2.4.0-alpha10 がリリースされました。バージョン 2.4.0-alpha10 に含まれる commit については、こちらをご覧ください。
新機能
- NavController で、
visibleEntriesStateFlow を介してすべての表示可能なNavBackStackEntryインスタンスのリストを取得できるようになりました(Ia964e) rememberNavController()がオプションのNavigatorインスタンスのセットを受け取るようになりました。これらのインスタンスは、返されるNavControllerに追加され、Accompanist Navigation Material の Navigator など、オプションの Navigator のサポートを強化します。(I4619e)
バグの修正
- Activity の再作成時に Dynamic Navigation がクラッシュしなくなりました。(Ifa6a3、b/197942869)
NavHostを含むコンポーザブルのデスティネーションにポップバックした後にのみ発生する、システムの [戻る] ボタンに関する問題を修正しました。(3ed148、b/195668143)- SafeArgs は、
fromBundle()とfromSavedStateHandle()の引数を適切なパラメータ順序で生成するようになりました。(I824a8、b/200059831)
バージョン 2.4.0-alpha09
2021 年 9 月 15 日
androidx.navigation:navigation-*:2.4.0-alpha09 がリリースされました。バージョン 2.4.0-alpha09 に含まれる commit については、こちらをご覧ください。
新機能
clearBackStack()メソッドを使用して、popBackStack()またはpopUpToSaveStateで保存された状態をクリアできるようになりました。(I80a0f)- ネストされたナビゲーション グラフのビルダーに引数やディープリンクのリストを渡せるようになりました。結果のグラフに自動的に追加されます。(I8a470、b/182545357)
API の変更
navArgumentKotlin DSL 関数が、navigation-composeではなくnavigation-commonの一部になりました。この関数を引き続き使用するには、インポートを更新する必要があります。(I1d095)
動作の変更
- Safe Args は引数を生成する際、デフォルト値のないパラメータを、デフォルト値のある引数のパラメータの前に置くようになりました。(I89709、b/198493585)
バグの修正
- Navigation Compose を使用する場合、NavGraphs はすべての子が
DESTROYEDの場合にのみDESTROYEDになります。(I86552、b/198741720) - null 許容の
NavDeepLink引数にデフォルト値は不要になりました。(Ia14ef、b/198689811) - 新しいグラフで
setGraph()を呼び出すと、バックスタックをポップする以前の動作に加えて、保存されたバックスタックもクリアされるようになりました。(I97f96) launchSingleTopの使用時にOnDestinationChangedListenerインスタンスとcurrentBackStackEntryFlowが通知されない問題を修正しました。(Iaaebc)
依存関係の更新
- Navigation Compose が Activity Compose 1.3.1 に依存するようになりました。(I05829)
- Navigation Compose が Lifecycle ViewModel Compose
2.4.0-beta01に依存するようになりました。(Ib86a3)
バージョン 2.4.0-alpha08
2021 年 9 月 1 日
androidx.navigation:navigation-*:2.4.0-alpha08 がリリースされました。バージョン 2.4.0-alpha08 に含まれる commit については、こちらをご覧ください。
新機能
NavTypeクラスを拡張してカスタムの NavType を作成できるようになりました。カスタム型がサポートされるのは、ナビゲーション グラフ Kotlin DSL などを使用してプログラムでナビゲーション グラフを作成する場合に限られます。(I78440、b/196871885)
動作の変更
- アクションを生成するとき、Safe Args から生成された Kotlin コードが、デフォルト値のある引数の前にデフォルト値のない引数をパラメータとして置くようになりました。(Idb697、b/188855904)
- ディープリンクが、すべての必須の引数(デフォルト値のない引数)が
Uriに存在することを確認するようになりました。(#204、b/185527157)
バグの修正
- composable() 内で
getBackStackEntryとpreviousBackStackEntryをremember()とともに使用しても、バックスタックにデスティネーションがないことについて例外がスローされないようになりました。(I75138、b/194313238) - バックスタック引数を変更して
launchSingleTop=trueを使用する際に、Navigation Compose が適切に再コンポーズされるようになりました。(Iebd69、b/186392337) - 13 個または 29 個のデスティネーションを持つグラフで
setGraphを呼び出す場合にArrayIndexOutOfBoundsExceptionがなくなりました。(I1a9f1、b/195171984) - SafeArgs Java 生成ツールが、Args クラスを生成するときに lint 警告を発生させなくなりました。(I1a666、b/185843837)
外部からの協力
- ディープリンクがすべての必須の引数(デフォルト値のない引数)が
Uriに存在することを確認するようにした ospixd 様に感謝いたします。(#204、b/185527157)
バージョン 2.4.0-alpha07
2021 年 8 月 18 日
androidx.navigation:navigation-*:2.4.0-alpha07 がリリースされました。バージョン 2.4.0-alpha07 に含まれる commit については、こちらをご覧ください。
バグの修正
- Navigation Compose で複数のバックスタックの機能の使用中に、構成の変更後とグラフの変更時に状態が適切に保存されるようになりました。(If5a3d、b/195141957)
- 複数のバックスタックを持つ Navigatioin Compose の使用時に同じタブを再選択しても、画面が空白になることはなくなりました。(I860dc、b/194925622)
NavHostがNavBackStackEntryのLifecycle.Stateの変更を監視するようになりました。そのため、フラグメントでNavHostを使用すると、画面が空白になるのではなく、ライフサイクルの変更として適切に再コンポーズされるようになりました。(I4eb85、b/195864489)- アクティビティを再作成した後(構成の変更後)、
DialogFragmentを閉じるとNavControllerの状態が正しく更新されない問題を修正しました。(Icd72b) - ダイアログ デスティネーションをポップすると、NavController のシステムの [戻る] ボタン処理が更新されず、バックスタックにポップがない場合でも、NavController が [戻る] ボタンをインターセプトする可能性がある問題を修正しました。(If3b34)
- Safe-args が、
ViewModelコードのテストに使用できる引数のtoSavedStateHandleメソッドを自動的に生成するようになりました。(If1e2d、b/193353880)
バージョン 2.4.0-alpha06
2021 年 8 月 4 日
androidx.navigation:navigation-*:2.4.0-alpha06 がリリースされました。バージョン 2.4.0-alpha06 に含まれる commit については、こちらをご覧ください。
API の変更
AbstractListDetailFragmentのrequireSlidingPaneLayout()メソッドとrequireDetailPaneNavHostFragment()メソッドの名前がそれぞれgetSlidingPaneLayout()とgetDetailPaneNavHostFragment()に変更されました。(I34a08)
動作の変更
Crossfadeなどのアニメーションで移動する場合、新しいデスティネーションのLifecycleは、アニメーションが完了した場合にのみRESUMEDに到達するようになりました。(If0543、b/172112072、b/194301889)- Navigation Compose の
NavHostで、グラフを最初のコンポジションの一部として設定するようになりました。(Ieb7be)
バグの修正
- ナビゲーション グラフの最後のデスティネーションをポップした際に、
ClassCastExceptionがスローされなくなりました。(If0543、b/172112072、b/194301889) Uriを使用せずにディープリンクを追加し、ルートまたはディープリンク経由で移動すると発生するNullPointerExceptionを修正しました。(938a0c、b/193805425)- ディープリンクされた
NavBackStackEntryがRESUMED状態に到達しない Navigation Compose の問題を修正しました。(I192c5) - ダイアログ デスティネーションをポップすると、NavController のシステムの [戻る] ボタン処理が更新されず、バックスタックにポップがない場合でも、NavController が [戻る] ボタンをインターセプトする可能性がある問題を修正しました。(aosp/1782668)
バージョン 2.4.0-alpha05
2021 年 7 月 21 日
androidx.navigation:navigation-*:2.4.0-alpha05 がリリースされました。バージョン 2.4.0-alpha05 に含まれる commit については、こちらをご覧ください。
動作の変更
- Navigation Compose の
NavHostが、デスティネーション間を移動する際に常にクロスフェードを使用するようになりました。(I07049、b/172112072) - NavHost のグラフを変更できるようになりました。グラフの startDestination とデスティネーションが同じグラフは同等とみなされ、
NavControllerバックスタックはクリアされません。(I0b8db、b/175392262)
バグの修正
- NavController の状態のリエントラント アップデートにより発生する、
NavBackStackEntryにアタッチされたLifecycleObserver内からpopBackStack()を呼び出すときのNoSuchElementExceptionを修正しました。(I64621) AbstractListDetailFragmentでは、AbstractListDetailFragmentが使用されていない場合にSlidingPaneLayoutを APK から完全に削除できるようになりました。(I611ad)NavGraphとNavDestinationが equals メソッドをオーバーライドするようになりました。これにより、同じ値を持つ 2 つのオブジェクトは同等とみなされます。(I166eb、b/175392262)
バージョン 2.4.0-alpha04
2021 年 7 月 1 日
androidx.navigation:navigation-*:2.4.0-alpha04 がリリースされました。バージョン 2.4.0-alpha04 に含まれる commit については、こちらをご覧ください。
新機能
navigation-fragmentアーティファクトに、新しいAbstractListDetailFragmentによる 2 ペイン レイアウトのビルド済み実装が追加されました。このフラグメントは、実装例に示されているように、SlidingPaneLayoutを使用してリストペイン(サブクラスによって提供されます)と詳細ペイン(NavHostFragmentを実装として使用します)を管理します。(Iac4be、b/191276636)navigation-composeアーティファクトのNavHostが、composableのデスティネーションに加えてdialogのデスティネーションをサポートするようになりました。このダイアログのデスティネーションはそれぞれ、Composable のDialog内、現在のcomposableのデスティネーションの上に表示されます。(I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
API の変更
NavigatorStateのadd関数の名前がpushに変更されました。add()の現在の呼び出しはすべて、push() に変更する必要があります。(Ie89fc、b/172112072)Navigatorのカスタム インスタンスで、NavigatorStateのpushWithTransactionAPI とpopWithTransitionAPI を使用してデスティネーションを非同期にプッシュまたはポップできるようになりました。なお、この API は、含まれているどのナビゲータでもまだ使用されていません。(Ic4d7c、b/172112072)
動作の変更
NavDeepLinkBuilderで、createPendingIntent()から返されたPendingIntentにPendingIntent.FLAG_IMMUTABLEが追加され、Android 12 をターゲットとしたときにこの API が期待どおりに機能するようになりました。(If8c52)
バグの修正
- グラフに渡された引数が動的にインクルードされるグラフに正しく渡されない
<include-dynamic>の問題を修正しました。(I3e115) string[]引数を使用してデフォルト値@nullがあるデスティネーションに移動したときのNullPointerExceptionを修正しました。(I1fbe8)@Navigator.Nameの ProGuard ルールを追加し、R8 3.1 フルモードを使用する際の問題を修正しました。(I2add9、b/191654433)- SafeArgs は、
1.5.0より前のバージョンのKotlinでアプリをビルドしても失敗しなくなります。(Icd1ff、b/190739257)
バージョン 2.4.0-alpha03
2021 年 6 月 16 日
androidx.navigation:navigation-*:2.4.0-alpha03 がリリースされました。バージョン 2.4.0-alpha03 に含まれる commit については、こちらをご覧ください。
バグの修正
- インクルードされたダイナミック グラフへの移動に 2 つの
navigate()呼び出しが必要となる問題を修正しました。(I7785c、b/188859835) - Navigation
2.4.0-alpha01で生じる回帰を修正しました。ユーザーがトップレベル デスティネーションにいるとき、setupActionBarWithNavController()が「上へ」アイコンを正しく削除しませんでした。(I5d443、b/189868637) - NavController のルートグラフを先にポップした後に
popBackStack()を呼び出す場合に発生するIllegalStateExceptionを修正しました。(I2a330、b/190265699) navigation-commonまたはそれに依存するアーティファクトを使用したときに、by navArgs()の ProGuard ルールが正しく適用されるようになりました。(I68800、b/190082521)- 初めてコールバックを受信したときに
navigate()を呼び出すOnDestinationChangedListenerが、移動先のデスティネーションを含む次のコールバックを正しく取得するようになりました。(Ie5f9e、b/190228815) - 動的機能モジュールと AGP 7.0 以降で使用したときに Safe Args がクラッシュすることがなくなりました。(I69518、b/189966576)
既知の問題
- 古いバージョンの Kotlin への依存関係が原因で、Safe Args が Gradle
6.7.0を使用したときに、Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’エラーが発生して失敗します。この問題は、Gradle 7.0 を使用するように更新することで回避できます。(b/190739257)
バージョン 2.4.0-alpha02
2021 年 6 月 2 日
androidx.navigation:navigation-*:2.4.0-alpha02 がリリースされました。バージョン 2.4.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
- ルートが、Activity、Fragment、Dialog のデスティネーションに加え、DynamicNavigation Kotlin DSL 全体でサポートされるようになりました。(Ib5544、Ia617b、I22f96、b/188914648、b/188901565)
NavigationUIで、状態の保存を無効にする試験的 API を一時的に追加しました。常に状態を保存するのが正しい動作ですが、状態の保存時に対応できない非推奨となったライブラリが引き続き使用されています(保持されたフラグメントなど)。この追加により、非対応の API の使用をアプリから減らすための時間的余裕が生まれます。(Idf93c)Navigation に、カスタム NavigationUI の実装に役立つ
findDestination()API とgetHierarchy()API が追加されました。findDestination()は、NavGraphの拡張関数です。グラフ内でデスティネーションを見つけます。getHierarchy()は、NavDestinationの関数です。指定されたデスティネーションが別のデスティネーションの階層にあるかどうかを確認できます。(I2932f、b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }BottomNavigationViewを受け取る NavigationUI メソッドが更新され、代わりに Material1.4.0、NavigationBarViewで導入されたスーパークラスを受け取るようになりました。これによりNavigationRailViewとともに使用できるようになります。(Ib0b36、b/182938895)XML から
<action>要素をインフレートする場合に、アニメーション属性で、app:enterAnim="?attr/transitionEnter"構文を使用してテーマから取得した属性を使用できるようになりました。(I07bc1、b/178291654)
API の変更
- ID を使用する Kotlin DSL ビルダーが非推奨になりました。ルートを使用するビルダーに置き換えてください。(I85b42、b/188816479)(I9f58f、b/188816479)
バグの修正
DialogFragmentNavigatorを、システムの [戻る] ボタンが押されて、または外側をクリックされてダイアログが閉じられたときに、NavigatorState.pop()API を使用してNavControllerに通知するようにしました。これによって、NavControllerの状態が常に Navigator の状態と同期されるようになります。(I2ead9)onDestinationChangedコールバックでOnDestinationChangedListenersのリストを操作するときに、Navigation でConcurrentModificationExceptionが発生しなくなりました。(Ib1707、b/188860458)Kotlin で方向プロパティを生成するときに Safe Args がクラッシュすることがなくなりました。(Id2416、b/188564435)
NavDestination の setId メソッドが
@IdResでアノテーションされるように修正し、リソース ID のみを受け付けるようになりました。(I69b80)findNodeの int パラメータが、residからresIdになりました。(I7711d)
依存関係の更新
- Safe-Args は、Android Gradle プラグイン 4.2.0 に依存するようになりました。これによって、
applicationIdTextResourceの使用に関する警告が表示されなくなります。(I6d67b、b/172824579)
バージョン 2.4.0-alpha01
2021 年 5 月 18 日
androidx.navigation:navigation-*:2.4.0-alpha01 がリリースされました。バージョン 2.4.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
NavControllerのcurrentBackStackEntryAsFlow()メソッドは、現在のNavBackStackEntryが変更されるたびに出力するFlowを提供します。このフローは、OnDestinationChangedListenerを手動で管理する代わりに使用できます。(I19c4a、#89、b/163947280)
複数のバックスタック
NavController は、デスティネーションのバックスタックを管理する責任を負っていて、navigate() でデスティネーションに移動する際にバックスタックにそのデスティネーションを追加し、popBackStack() が呼び出されるか、システムの [戻る] ボタンがトリガーされたときにデスティネーションを削除します。既存の NavOptions クラスとナビゲーション グラフ XML の <action> エントリの統合が拡張され、バックスタックの保存と復元をサポートしました。(b/80029773)
この変更の一環として、onNavDestinationSelected()、BottomNavigationView.setupWithNavController()、NavigationView.setupWithNavController() の NavigationUI メソッドは、ポップされたデスティネーションの状態を自動的に保存および復元するようになりました。これにより、コードを変更せずに複数のバックスタックをサポートできるようになりました。Fragment で Navigation を使用する場合、複数のバックスタックとの統合には、この方法をおすすめします。(Ie07ca)
状態の保存と復元の基盤となる API は、次のようなサーフェスから公開されています。
Navigation XML の
<action>要素で、app:popUpToSaveStateとapp:restoreStateのブール値属性を使用して、app:popUpToでポップされたデスティネーションの状態を保存し、app:destinationとして渡されたデスティネーションと関連付けられた状態を復元できるようになりました。<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />navOptionsKotlin DSL では、popUpToビルダーにrestoreStateブール値プロパティとsaveStateブール値プロパティを追加できます。// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }NavOptions.BuilderでNavOptionsオブジェクトを手動で作成する場合は、setRestoreState()と、追加のsaveStateパラメータをとるsetPopUpTo()の新しいオーバーロードを使用できます。NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);プログラムによる
popBackStack()の呼び出しに、saveStateパラメータを追加できるようになりました。
いずれの場合も、NavController は各 NavBackStackEntry の状態を保存および復元します。これには、すべてのナビゲーション デスティネーションにスコープ設定された ViewModel が含まれます。Navigator API が更新され、各 Navigator が独自の状態の保存と復元をサポートするようになりました。
Navigation Compose で composable デスティネーションに使用される ComposeNavigator と、Fragment の Navigation で <fragment> デスティネーションに使用される FragmentNavigator と DynamicFragmentNavigator が更新され、新しい Navigator API を使用して状態の保存と復元をサポートするようになりました。
ナビゲーションのルート
ルートは、デスティネーションを一意に識別する String です。このコンセプトは、これまで Navigation Compose でしか使用されていませんでしたが、コア Navigation API の一部になりました。これは、Navigation Kotlin DSL でグラフを作成する際に使用する整数の ID の代わりになります。(b/172823546)
ID のみを受け取っていたすべての API に、ルート String を受け取るオーバーロードが追加されました。これには、navigate()、popBackStack()、popUpTo()、getBackStackEntry() が含まれます。
これにより、一部の API が次のように影響を受けます。
- Kotlin DSL の
popUpTokotlin プロパティは非推奨になりました。popUpToIdの使用をおすすめします。(I59c73、b/172823546) getStartDestination()API は非推奨になりました。getStartDestinationId()の使用をおすすめします。(I0887f、b/172823546)
以前のバージョンの Navigation Compose から Navigation Compose 2.4.0-alpha01 にアップグレードする場合、以下の拡張機能のインポートが不要になり、削除が必要となります。
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
KEY_ROUTE 引数は、NavDestination の route プロパティに置き換えられ、navBackStackEntry.destination.route を直接呼び出せるようになりました。
API の変更
- すべての Navigation アーティファクトが Kotlin で書き直されました。これにより、ジェネリクスを使用するクラス(
NavTypeサブクラスなど)の null 可能性が改善されました。これまで-ktxアーティファクトに含まれていたすべての Kotlin 拡張関数は、それぞれのメイン アーティファクトに移動されました。-ktxアーティファクトは引き続き公開されますが、完全に空になっています。(b/184292145) NavDeepLinkBuilderは、生成されたバックスタックに複数の異なるデスティネーションを追加できるようになりました。(I3ee0d、b/147913689)DynamicNavHostFragmentのファクトリ関数を追加しました(Icd515、b/175222619)NavBackStackEntryの一意の ID が公開 API の一部として公開されるようになりました。(Ie033a)nameフィールド、argumentフィールド、NamedNavArgumentの破棄関数が公開になりました。(#174、b/181320559)- 関連するコンポジション ローカルに
NavBackStackEntryを提供する新しいNavBackStackEntry#provideToCompositionLocals拡張を導入しました。(#175、b/187229439)
Safe Args
Safe Args が
NavArgsクラスごとにfromSavedStateHandle()メソッドを生成するようになりました。(#122、b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }KotlinPoet
1.8.0に依存するように Safe Args を更新しました。(#172、b/183990444)
動作の変更
- ナビゲーションは、Lifecycle
2.3.1に依存するようになり、setGraph()、popBackStack()、navigateUp()、navigate()、NavBackStackEntryLifecycleを更新するメソッドを@MainThreadとマークし、Navigation を Lifecycle2.3.0で導入されたメインスレッド強制に対応させました。(b/171125856) - ディープリンクからの Enum 引数の解析で、大文字と小文字を区別しないようになりました。列挙型の値が
REDでも、http://www.example.com/redのようなディープリンクがwww.example.com/{color}ディープリンクとマッチするようになりました。(#152、b/135857840)
Compose の互換性
androidx.navigation:navigation-compose:2.4.0-alpha01は、Compose バージョン1.0.0-beta07以降に対してのみ互換性があります。
バグの修正
- 末尾の引数のプレースホルダが、接尾辞が完全に一致するディープリンクよりも優先される問題を修正しました。(#153、b/184072811)
NavHostFragmentが、デフォルトのDialogFragmentNavigatorと同じ@Navigator.Name("dialog")を使用するカスタムの Navigator をサポートするようになりました。(Ib1c2c、b/175979140)- 同じインスタンスで繰り返し呼び出しても問題が発生しないように、
NavigatorProvider#addNavigatorの動作を改善しました。(#176、b/187443146)
外部からの協力
- Safe Args が
NavArgsクラスごとにfromSavedStateHandle()メソッドを生成するようにした simonschiller 様に感謝いたします。(#122、b/136967621) - ディープリンクの Enum 引数の解析で大文字と小文字を区別しないようにした Bradleycorn 様に感謝いたします。(#152、b/135857840)
- 末尾の引数のプレースホルダが、接尾辞が完全に一致するディープリンクよりも優先される問題を修正した osipxd 様に感謝いたします。(#153、b/184072811)
- KotlinPoet
1.8.0に依存するように Safe Args を更新した tatocaster 様に感謝いたします。(#172、b/183990444) nameフィールド、argumentフィールド、NamedNavArgumentの破棄関数を公開にした jossiwolf 様に感謝いたします。(#174、b/181320559)- 関連するコンポジション ローカルに
NavBackStackEntryを提供する新しいNavBackStackEntry#provideToCompositionLocals拡張を導入した jossiwolf 様に感謝いたします。(#175、b/187229439) - 同じインスタンスで繰り返し呼び出しても問題が発生しないように、
NavigatorProvider#addNavigatorの動作を改善した jossiwolf 様に感謝いたします。(#176、b/187443146)
Navigation Compose バージョン 1.0.0
バージョン 1.0.0-alpha10
2021 年 4 月 7 日
androidx.navigation:navigation-compose:1.0.0-alpha10 がリリースされました。バージョン 1.0.0-alpha10 に含まれる commit については、こちらをご覧ください。
API の変更
NavHostがModifierを受け入れるようになりました。これは、デスティネーションのコンポーザブルをラップするコンポーズ可能なコンテナに渡されます。(I85aca、b/175125483)
バグの修正
NavHostが、NavHostをプレビューしている場合など、OnBackPressedDispatcherOwnerが見つからないときでも機能するようになりました。(I7d8b4)- Navigation Compose が、Navigation
2.3.5に依存するようになり、NavHostデスティネーション内でBackHandlerを使用する際の問題が解決されました。(I7e63b、b/182284739)
バージョン 1.0.0-alpha09
2021 年 3 月 10 日
androidx.navigation:navigation-compose:1.0.0-alpha09 がリリースされました。バージョン 1.0.0-alpha09 に含まれる commit については、こちらをご覧ください。
API の変更
LocalViewModelStoreOwner.currentが null 許容のViewModelStoreOwnerを返すようになり、現在の合成中にViewModelStoreOwnerが使用可能かどうかを判断しやすくなりました。ViewModelStoreOwnerを必要とする API(viewModel()やNavHostなど)は、ViewModelStoreOwnerが設定されていない場合、引き続き例外をスローします。(Idf39a)
バグの修正
- Navigation Compose が、Navigation 2.3.4 に依存するようになりました。これには、グラフを設定した後に同じ ViewModelStore オブジェクトを設定しようとする問題の修正が含まれます。(I65c24、b/177825470)
バージョン 1.0.0-alpha08
2021 年 2 月 24 日
androidx.navigation:navigation-compose:1.0.0-alpha08 がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください。
新機能
NavHostがLocalSavedStateRegistryOwnerの CompositionLocal をそのデスティネーションのNavBackStackEntryに入力して、SavedStateRegistryに直接保存されたすべての状態がデスティネーションとともに保存、復元されるようになりました。(I435d7、b/179469431)
バージョン 1.0.0-alpha07
2021 年 2 月 10 日
androidx.navigation:navigation-compose:1.0.0-alpha07 がリリースされました。バージョン 1.0.0-alpha07 に含まれる commit については、こちらをご覧ください。
依存関係の更新
- Navigation Compose が Lifecycle ViewModel Compose 1.0.0-alpha01 に依存し、
composableデスティネーションに対してviewModel()サポートを提供するようになりました。(I7a374) NavHostが Activity-Compose 1.3.0-alpha01 の新しいLocalOnBackPressedDispatcherOwnerを使用し、NavControllerに設定されているOnBackPressedDispatcherを取得するようになりました。(I65b12)
バージョン 1.0.0-alpha06
2021 年 1 月 28 日
androidx.navigation:navigation-compose:1.0.0-alpha06 がリリースされました。バージョン 1.0.0-alpha06 に含まれる commit については、こちらをご覧ください。
API の変更
- 関連付けられた
NavBackStackEntryを返すgetBackStackEntry(route: String)拡張メソッドをNavControllerに追加しました。(If8931)
バージョン 1.0.0-alpha05
2021 年 1 月 13 日
androidx.navigation:navigation-compose:1.0.0-alpha05 がリリースされました。バージョン 1.0.0-alpha05 に含まれる commit については、こちらをご覧ください。
Compose 1.0.0-alpha10 に依存するよう更新しました。
バージョン 1.0.0-alpha04
2020 年 12 月 16 日
androidx.navigation:navigation-compose:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください。
- Compose
1.0.0-alpha09との互換性をサポートするよう更新しました。
バージョン 1.0.0-alpha03
2020 年 12 月 2 日
androidx.navigation:navigation-compose:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
バグの修正
- 構成の変更、またはプロセスの中断や再作成の後に
popBackStack()とnavigateUp()が機能しない問題を修正しました。(Icea47、b/173281473) - NavHost 内のネストされたグラフへの移動が正しく行われるようになりました。(I0948d、b/173647694)
バージョン 1.0.0-alpha02
2020 年 11 月 11 日
androidx.navigation:navigation-compose:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
API の変更
- Navigation Compose で、popUpTo オペレーションと launchSingleTop オペレーションを使用するために NavOptions がサポートされるようになりました(If96c3、b/171468994)
- ID ではなくルートを取るナビゲーション関数が追加され、Navigation Compose DSL でネストされたグラフを作成できるようになりました。(I1661d)
- NavHost のパラメータのリストで、startDestination を route より前に移動しました(Ie620e)
- NavHost コンポーザブル外の開始デスティネーションとしてルートを使用するグラフを作成できるようになりました。(Iceb75)
バージョン 1.0.0-alpha01
2020 年 10 月 28 日
android.navigation:navigation-compose:1.0.0-alpha01 がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
navigation-compose アーティファクトは、Navigation コンポーネントと Jetpack Compose との統合を提供します。アプリ内のデスティネーションとして @Composable 関数を使用します。
この初回リリースで提供されるものは以下のとおりです。
- Kotlin DSL を使用してナビゲーション グラフを作成できる
NavHostcomposable。 - ライフサイクル、
ViewModel、登録済みの状態の、デスティネーション レベルでのスコープ設定。 - システムの [戻る] ボタンとの自動統合。
- 引数を受け渡す、デスティネーションにディープリンクを追加する、以前のデスティネーションに結果を返す機能のサポート。
- 状態のホイストや、
NavHostの外部にある composable(ボトム ナビゲーション バーなど)へのNavControllerの接続を可能にする、rememberNavController()およびcurrentBackStackEntryAsState()内の Compose 固有のヘルパー。
詳しくは、Compose でのナビゲーションについてのガイドをご覧ください。
バージョン 2.3.5
バージョン 2.3.5
2021 年 4 月 7 日
androidx.navigation:navigation-*:2.3.5 がリリースされました。バージョン 2.3.5 に含まれる commit については、こちらをご覧ください。
新機能
NavDeepLinkRequestまたはUriを使用して移動する際、KEY_DEEP_LINK_INTENTを介して引数からインテントを取得し、外部ディープリンクですでに利用可能な機能をミラーリングすることで、結果のデスティネーションでUri、アクション、MIME タイプにアクセスできるようになりました。(I975c3、b/181521877)
バグの修正
- LifecycleOwner として
NavBackStackEntryでディスパッチャに追加されたOnBackPressedCallbacksが、アクティビティのライフサイクルがSTOPPEDからSTARTEDになった後に、適切にインターセプトするようになりました(IFF94F、b/182284739) - ディープリンク ドメインの解析で大文字と小文字が区別されないようになり、
www.example.comがwww.example.comとwww.Example.comの両方と一致するようになりました。なお、クエリ パラメータ名では、引き続き大文字と小文字が区別されます。(#144、b/153829033) - デスティネーションに null 値非許容のデフォルト引数が複数あり、それらの引数のサブセットのみをオーバーライドしながら、そのデスティネーションに移動したときに発生する場合がある
NullPointerExceptionを修正しました。(aosp/1644827)
依存関係の更新
- Navigation Safe Args Gradle プラグインが Kotlin Gradle プラグイン 1.4.31 に依存するようになりました。(aosp/1661058、b/181156413)
外部からの協力
- ディープリンク ドメインの解析で大文字と小文字が区別されないようにする pull リクエストに関し、
bentrengroveに感謝します。(#144、b/153829033)
バージョン 2.3.4
バージョン 2.3.4
2021 年 3 月 10 日
androidx.navigation:navigation-*:2.3.4 がリリースされました。バージョン 2.3.4 に含まれる commit については、こちらをご覧ください。
新機能
- ディープリンク URI の一部として送信された
ReferenceType引数が適切に解析されるようになりました。これにより、未加工の整数値と、0xで始まる 16 進数値の両方がサポートされます。(#127、b/179166693) app:argType="float"の引数のandroid:defaultValueで整数のデフォルト値がサポートされるようになったことで、android:defaultValue="0"を使用できるようになり、0.0を使用する必要がなくなりました。(#117、b/173766247)
バグの修正
- Navigation の動的機能のサポートを使用するとインストールの進行状況が停滞する問題を修正しました。(Ib27a7、b/169636207)
- すでに設定されている同じオブジェクトで
setViewModelStoreまたはsetLifecycleOwnerを呼び出すと、no-op になるようになりました。(Idf491、b/177825470) - Safe-Args で、java 使用時の適切なメソッドに抑制アノテーションが追加されました。(I8fbc5、b/179463137)
外部からの協力
- pull リクエストにより、ディープリンク URI の一部として送信された
ReferenceType引数が適切に解析されるようになりました。JvmNameに感謝いたします。(#127、b/179166693) - pull リクエストにより、
app:argType=”float”の引数のdefaultValueで整数のデフォルト値をサポートできるようになりました。tatocasterに感謝いたします。(#117、b/173766247)
バージョン 2.3.3
バージョン 2.3.3
2021 年 1 月 27 日
androidx.navigation:navigation-*:2.3.3 がリリースされました。バージョン 2.3.3 に含まれる commit については、こちらをご覧ください。
バグの修正
LifecycleがCREATEDに移動される前にNavBackStackEntryをポップしてもクラッシュしなくなりました。(Ie3ba3)- b/171364502 が原因で回帰が発生する問題(アニメーション リソース値が
0のアクティビティに移動するとResourceNotFoundExceptionがスローされる)を修正しました。(I7aedb、b/176819931)
バージョン 2.3.2
バージョン 2.3.2
2020 年 12 月 2 日
androidx.navigation:navigation-*:2.3.2 がリリースされました。バージョン 2.3.2 に含まれる commit については、こちらをご覧ください。
バグの修正
onNavDestinationSelectedで<activity>のデスティネーションを使用してもアクティビティに移動できないNavigationUIの回帰を修正しました (I22e34、b/171364502)navigation-dynamic-features-fragmentが新しくインストールしたデスティネーションに何度も移動する問題を修正しました。(aosp/1486056、b/169636207)launchSingleTopの使用時にデフォルトの引数をOnDestinationChangedListenerインスタンスに送信できない問題を修正しました。(I2c5cb)- ネストされたナビゲーション グラフに移動しても、バックスタック上に新しいグラフ インスタンスが作成されない問題を修正しました。(Ifc831)
- ナビゲーション グラフで最後のデスティネーションを削除した
popUpToでnavigate()を使用すると、すぐには破棄されず、ナビゲーション グラフ自体がバックスタックから削除される問題を修正しました。(I910a3) - Navigation SafeArgs は、Kotlin の明示的な API モードをサポートする KotlinPoet バージョン 1.7.2 を使用するようになりました。(I918b5)
NavHostFragment.findNavController(Fragment)は、Fragment 階層と Fragment のビュー階層の既存の確認に加えて、DialogFragment のルート デコレーション ビューも確認するようになりました。これにより、Navigation を使用するダイアログ フラグメントをFragmentScenarioとNavigation.setViewNavController()でテストできます。(I69e0d)
バージョン 2.3.1
バージョン 2.3.1
2020 年 10 月 14 日
androidx.navigation:navigation-*:2.3.1 がリリースされました。バージョン 2.3.1 に含まれる commit については、こちらをご覧ください。
新機能
- ナビゲーション UI にデフォルトの Animator リソースが追加されました。デフォルトのアニメーション リソースよりもこちらをおすすめします。(b/167430145)
- NavOptions が hashCode メソッドと equals メソッドをオーバーライドするようになりました(b/161586466)
- Navigation で「No destination with ID」の IllegalArgumentException に現在のデスティネーションが追加されました。これにより、デベロッパーのデバッグ環境が改善されます。(b/168311416)
バグの修正
- 生成された引数クラス名が 100 文字を超えていても、Safe Args が return 行をラップしなくなりました。(b/168584987)
依存関係の変更
navigation-uiが DrawerLayout 1.1.1 に依存するようになりました。これにより、NavigationUIはLOCK_MODE_LOCKED_CLOSEDまたはLOCK_MODE_LOCKED_OPENを使用している場合でもドロワーを開くことができます。(b/162253907)- Safe Args は KotlinPoet 1.6.0 に依存するようになりました(aosp/1435911)
- Safe Args は AGP 4.0.1 に依存するようになりました(aosp/1442337)
バージョン 2.3.0
バージョン 2.3.0
2020 年 6 月 24 日
androidx.navigation:navigation-*:2.3.0 がリリースされました。バージョン 2.3.0 に含まれる commit については、こちらをご覧ください。
2.2.0 以降の主な変更
- 機能モジュールの統合:
navigation-dynamic-features-runtimeアーティファクトとnavigation-dynamic-features-fragmentアーティファクトを使用すると、機能モジュール内で定義されているデスティネーションに移動して、必要に応じて機能モジュールのインストールを自動的に処理できます。詳細については、機能モジュールを使用して移動するをご覧ください。 - ナビゲーションのテスト:
navigation-testingアーティファクトから提供されるTestNavHostControllerを使って、現在のデスティネーションを設定し、ナビゲーション操作後にバックスタックを確認できます。詳細については、ナビゲーションをテストするをご覧ください。 - 結果を返す: Navigation バックスタック上で各デスティネーションに関連付けられた
NavBackStackEntryを使ってSavedStateHandleにアクセスできるようになりました。これは、特定のバックスタック エントリに関連付ける必要がある保存済み状態を少量保存するのに最適です。詳しくは、以前のデスティネーションに結果を返すをご覧ください。 NavigationUIによるOpenableのサポート:NavigationUIで使用しているDrawerLayoutがすべて、より汎用的なOpenableインターフェースに置き換えられました。このインターフェースは CustomView1.1.0に追加され、DrawerLayoutによって DrawerLayout1.1.0内に実装されます。- ディープリンクでのアクションと MIME タイプのサポート: ディープリンクが拡張され、以前から利用できる
app:uriに加えてapp:actionとapp:mimeTypeをサポートするようになりました。NavControllerでは、新しいNavDeepLinkRequestクラスを介して、これらのフィールドを自由に組み合わせた移動をサポートするようになりました。詳細については、NavDeepLinkRequest を使用して移動するをご覧ください。
既知の問題
- マニフェスト マージツールでは、ディープリンクのアクションと MIME タイプはまだサポートされていません。このサポートが完了するまで、マニフェストの
<nav-graph>要素から生成された<intent-filter>要素には、その<data>要素の MIME タイプやカスタム<action>は含まれません。マニフェストに適切な<intent-filter>を手動で追加する必要があります。
バージョン 2.3.0-rc01
2020 年 6 月 10 日
androidx.navigation:navigation-*:2.3.0-rc01 がリリースされました。バージョン 2.3.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 引数のないデスティネーションのインスタンスを引数のある別のインスタンスに
singleTopで置き換える際のNullPointerExceptionを修正しました。(b/158006669) NavControllerがスローするdestination is unknown例外に、NavControllerの状態を判断しやすくする追加のデバッグ情報が含まれるようになりました。(b/157764916)
バージョン 2.3.0-beta01
2020 年 5 月 20 日
androidx.navigation:navigation-*:2.3.0-beta01 がリリースされました。バージョン 2.3.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
NavBackStackEntryのLifecycleがプロセス終了後に適切に更新されない問題を修正しました。(b/155218371)setGraph()を呼び出す前に登録されたOnDestinationChangedListenerインスタンスが、プロセス終了後、復元されたデスティネーションに適切に送信されるようになりました。(b/155218371)singleTopを使用する際に、NavBackStackEntryの引数が正しく更新され、更新された引数がすべてのOnDestinationChangeListenerインスタンスに送信されるようになりました。(b/156545508)
依存関係の更新
NavigationUIアーティファクトが CustomView1.1.0-rc01と DrawerLayout1.1.0-rc01に依存するようになりました。(aosp/1309696)
バージョン 2.3.0-alpha06
2020 年 4 月 29 日
androidx.navigation:navigation-*:2.3.0-alpha06 がリリースされました。バージョン 2.3.0-alpha06 に含まれる commit については、こちらをご覧ください。
新機能
- ディープリンクが拡張され、以前の
app:uriに加えてapp:actionとapp:mimeTypeをサポートするようになりました。NavController で、新しいNavDeepLinkRequestクラスを介して、これらのフィールドの任意の組み合わせによるナビゲーションがサポートされるようになりました。(b/136573074、b/135334841)
API の変更
- Dynamic Navigation のデスティネーションに対する Kotlin DSL のサポートを大幅に拡張しました。(b/148969800)
バグの修正
- ネストされた最初のデスティネーションを使用するときにディープリンク インテントが無視される問題を修正しました。(b/154532067)
バージョン 2.3.0-alpha05
2020 年 4 月 15 日
androidx.navigation:navigation-*:2.3.0-alpha05 がリリースされました。バージョン 2.3.0-alpha05 に含まれる commit については、こちらをご覧ください。
新機能
<include-dynamic>を使用するダイナミック グラフについては、app:graphPackageを指定する必要がなくなり、applicationIdにmoduleName接尾辞をピリオドに続けて追加したものをデフォルトで使用します。graphPackageをカスタマイズする必要がある場合は、${applicationId}プレースホルダをご利用いただけるようになりました。(b/152696768)- ナビゲーション グラフ Kotlin DSL では、アクションの
defaultArgumentsMapを公開し、ナビゲーション XML ファイル内の<action>要素にデフォルト値を設定する機能をミラーリングするようになりました。(b/150345605)
バグの修正
- Navigation 2.2.2 以降: アクティビティに複数の
NavHostFragmentインスタンスがある場合に、グラフの最初のデスティネーションにディープリンクする際のIllegalStateExceptionを修正しました。(b/147378752)
依存関係の更新
- Navigation が Fragment
1.2.4に依存するようになりました。(aosp/1277325) - Dynamic Navigation が Play Core
1.7.2に依存するようになりました。(aosp/1282257)
バージョン 2.3.0-alpha04
2020 年 3 月 18 日
androidx.navigation:navigation-*:2.3.0-alpha04 がリリースされました。バージョン 2.3.0-alpha04 に含まれる commit については、こちらをご覧ください。
新機能
- Navigation Kotlin DSL に機能モジュールのアクティビティとフラグメントのデスティネーションに対するサポートを追加しました。(b/148969800)
API の変更
DynamicExtrasクラスでビルダー パターンが使用されなくなり、直接構築できるようになりました。(aosp/1253671)DynamicActivityNavigatorは、ActivityではなくContextをコンストラクタで受け取るようになりました。(aosp/1250252)
バグの修正
NavigationUIで空のラベル(デスティネーションがandroid:label=””の場合)が無視されなくなり、空の文字列にタイトルが正しく設定されるようになりました。(b/148679860)
依存関係の更新
- Navigation Dynamic Features アーティファクトが Play Core
1.6.5に依存するようになりました。(b/149556401)
バージョン 2.3.0-alpha03
2020 年 3 月 4 日
androidx.navigation:navigation-*:2.3.0-alpha03 がリリースされました。バージョン 2.3.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
DrawerLayout具象クラスに依存する代わりに、AppBarConfigurationは CustomView1.1.0-alpha02(DrawerLayout1.1.0-alpha04でDrawerLayoutが実装)で導入されたOpenableインターフェースを使用するようになり、それによってNavigationUIでOpenableのカスタム実装を使用することが可能になりました。(b/129030452)
バグの修正
navigation-common-ktxProGuard ルールで、すべてのNavArgsインスタンスではなく、使用されているNavArgsクラスのみが正しく保持されるようになりました。(b/150213558)
依存関係の変更
- Navigation の Core
1.2.0への依存がもとに戻り、Navigation が Core1.2.0の新しい API に依存しない場合に、デベロッパーに新しい依存関係に移行することを強制しないようにするために、Core1.1.0に依存するようになりました。
バージョン 2.3.0-alpha02
2020 年 2 月 19 日
androidx.navigation:navigation-*:2.3.0-alpha02 がリリースされました。バージョン 2.3.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
NavBackStackEntryを使用すると、特定のバックスタック エントリに関連付ける必要がある、少量の保存済み状態を格納するのに適したSavedStateHandleにアクセスできるようになりました。使用例については、結果を返すをご覧ください。(b/79672220)
API の変更
getCurrentBackStackEntry()とgetPreviousBackStackEntry()の有用なメソッドが追加され、現在と以前のデスティネーションのNavBackStackEntryを簡単に取得できるようになりました。(b/79672220)
バグの修正
navigateUp()は、独自のタスクスタックでアプリを起動する際に、現在のデスティネーションの引数とKEY_DEEP_LINK_INTENTを以前のデスティネーションに渡すようになりました。(b/147456890)
依存関係の変更
- Navigation が Core
1.2.0に依存するようになりました。
バージョン 2.3.0-alpha01
2020 年 2 月 5 日
androidx.navigation:navigation-*:2.3.0-alpha01 がリリースされました。バージョン 2.3.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
- 新しい
navigation-testingアーティファクトではTestNavHostControllerクラスを利用できます。このクラスは、Navigation をテストする際にモックNavControllerの代わりに使用でき、これにより現在のデスティネーションを設定し、ナビゲーション操作の後にバックスタックを確認できます。(b/140884273) - 新しい
navigation-dynamic-features-fragment(およびその推移的な依存関係navigation-dynamic-features-runtime)を使用すると、機能モジュールのデスティネーションまたはナビゲーション グラフ全体(<include-dynamic>経由)を含めることができ、それらのデスティネーションに移動する場合にオンデマンドの機能モジュールをシームレスにインストールできます。詳細については、機能モジュールを使用して移動するをご覧ください。(b/132170186)
バグの修正
- Navigation
2.2.1以降: クエリ パラメータを持たないディープリンクは、後続の{argument}要素に追加する、またはディープリンクとの照合を行うのではなく、クエリ パラメータを正しく無視するようになりました。(b/147447512) - Navigation
2.2.1以降:DrawerArrowDrawableのnavigation-uiProGuard ルールが更新され、android.enableJetifier=trueは必須ではなくなりました。(b/147610424) - Navigation
2.2.1以降:navigation-common-ktxモジュールに、navigation-runtime-ktxと同じマニフェスト パッケージ名を共有するのではなく、固有のマニフェスト パッケージ名が付与されました。(aosp/1141947)
依存関係の更新
- Navigation
2.2.1以降: Navigation2.2.1は Lifecycle ViewModel SavedState2.2.0と Fragment1.2.1に依存するようになりました。
バージョン 2.2.2
バージョン 2.2.2
2020 年 4 月 15 日
androidx.navigation:navigation-*:2.2.2 がリリースされました。バージョン 2.2.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- アクティビティに複数の
NavHostFragmentインスタンスがある場合に、グラフの最初のデスティネーションにディープリンクする際のIllegalStateExceptionを修正しました。(b/147378752) NavigationUIで空のラベル(デスティネーションがandroid:label=””の場合)が無視されなくなり、空の文字列にタイトルが正しく設定されるようになりました。これは以前に Navigation 2.3.0-alpha04 でリリースされたものです。(b/148679860)navigation-common-ktxProGuard ルールで、すべてのNavArgsインスタンスではなく、使用されているNavArgsクラスのみが正しく保持されるようになりました。これは以前に Navigation 2.3.0-alpha03 でリリースされたものです。(b/150213558)
依存関係の更新
- Navigation が Fragment
1.2.4に依存するようになりました。(aosp/1277325)
バージョン 2.2.1
バージョン 2.2.1
2020 年 2 月 5 日
androidx.navigation:navigation-*:2.2.1 がリリースされました。バージョン 2.2.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- クエリ パラメータを持たないディープリンクは、後続の
{argument}要素に追加する、またはディープリンクとの照合を行うのではなく、クエリ パラメータを正しく無視するようになりました。(b/147447512) DrawerArrowDrawableのnavigation-uiProGuard ルールを更新し、android.enableJetifier=trueは必須ではなくなりました。(b/147610424)navigation-common-ktxモジュールに、navigation-runtime-ktxと同じマニフェスト パッケージ名を共有するのではなく、固有のマニフェスト パッケージ名が付与されました。(aosp/1141947)
依存関係の更新
- Navigation
2.2.1が、Lifecycle ViewModel SavedState2.2.0と Fragment1.2.1に依存するようになりました。
バージョン 2.2.0
バージョン 2.2.0
2020 年 1 月 22 日
androidx.navigation:navigation-*:2.2.0 がリリースされました。バージョン 2.2.0 に含まれる commit については、こちらをご覧ください。
2.1.0 以降の重要な変更
- NavBackStackEntry:
NavController.getBackStackEntry()を呼び出して、バックスタック上のデスティネーションまたはナビゲーション グラフの ID を渡せるようになりました。返されるNavBackStackEntryは、ナビゲーション駆動のLifecycleOwner、ViewModelStoreOwner(NavController.getViewModelStoreOwner()で返されるものと同じ)、SavedStateRegistryOwnerを提供し、さらにそのデスティネーションの開始に使用する引数を提供します。 - Lifecycle ViewModel SavedState の統合:
NavController.getBackStackEntry()またはNavController.getViewModelStoreOwner()によって返されるViewModelStoreOwnerでby navGraphViewModels()またはViewModelProviderコンストラクトを使用する際、SavedStateViewModelFactoryがデフォルト ファクトリになりました。 - ディープリンクのクエリ パラメータ サポート: クエリ パラメータを持つディープリンクが、順序変更されたクエリ パラメータをサポートするようになりました。ディープリンクのマッチング時、デフォルト値を持つ引数または null 許容の引数がオプションになりました。
- アニメーション サポートの改善:
NavHostFragmentは Fragment 1.2.0 のFragmentContainerViewを使用するようになり、アニメーションの z オーダーの問題と、フラグメントにディスパッチするウィンドウ インセットが修正されます。
バージョン 2.2.0-rc04
2019 年 12 月 18 日
androidx.navigation:navigation-*:2.2.0-rc04 がリリースされました。バージョン 2.2.0-rc04 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment
1.2.0-rc04で調整されたフェード アニメーションに合わせて、navigation-uiで使用されるデフォルトのフェード アニメーションを調整しました。(b/145769814)
バージョン 2.2.0-rc03
2019 年 12 月 4 日
androidx.navigation:navigation-*:2.2.0-rc03 がリリースされました。バージョン 2.2.0-rc03 に含まれる commit については、こちらをご覧ください。
バグの修正
- パスの末尾にクエリ パラメータと引数を使用したときに、最終パス引数の複数の文字を解析できないというディープリンク解析の問題を修正しました。(b/144554689)
- オプションのパラメータが
nullではなく"@null"を受け取るというディープリンク解析の問題を修正しました。(b/141613546) NavHostFragmentは、FragmentContainerViewで使用した場合に構成変更後にグラフを正しく復元するようになりました。(b/143752103)
依存関係の変更
- Navigation は、必要に応じて Lifecycle
2.2.0-rc03、Lifecycle ViewModel SavedState1.0.0-rc03、Activity1.1.0-rc03、Fragment1.2.0-rc03に依存するようになりました。
バージョン 2.2.0-rc02
2019 年 11 月 7 日
androidx.navigation:navigation-*:2.2.0-rc02 がリリースされました。バージョン 2.2.0-rc02 に含まれる commit については、こちらをご覧ください。
依存関係の変更
- Navigation が androidx.lifecycle
2.2.0-rc02に依存するようになりました。
バージョン 2.2.0-rc01
2019 年 10 月 23 日
androidx.navigation:navigation-*:2.2.0-rc01 がリリースされました。2.2.0-beta01 からの変更はありません。バージョン 2.2.0-rc01 に含まれる commit については、こちらをご覧ください。
バージョン 2.2.0-beta01
2019 年 10 月 9 日
androidx.navigation:navigation-*:2.2.0-beta01 がリリースされました。バージョン 2.2.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
NavDestinationとそのサブクラスがtoString()をオーバーライドして、デバッグ時に役立つ情報をさらに提供するようになりました(b/141264986)
動作の変更
- ディープリンクのマッチングの際、余分なクエリ パラメータがあると、マッチングが失敗するのではなく、無視するようになりました(b/141482822)
バグの修正
- クエリ パラメータも指定されている場合、ディープリンクのパス内の引数が無視される問題を修正しました(b/141505755)
ActivityのnavArgs()Kotlin 拡張機能で、追加機能がない場合のエラー メッセージを改善しました(b/141408999)- Safe Args によって生成される
DirectionsJava クラスにデフォルト値が指定されました(b/141099045) - Safe Args によって生成される
ArgsJava クラスにデフォルト値が指定されました(b/140123727) Toolbarを使用する場合、NavigationUIで 2 つのトップレベルのデスティネーション間を移動したときのテキストの変化がアニメーション化されなくなりました(b/140848160)
バージョン 2.2.0-alpha03
2019 年 9 月 18 日
androidx.navigation:navigation-*:2.2.0-alpha03 がリリースされました。バージョン 2.2.0-alpha03 に含まれる commit については、こちらをご覧ください。
動作の変更
setGraphを呼び出した後にsetViewModelStore()を呼び出した結果が、IllegalStateExceptionになりました。これは初期セットアップの一環として、常にNavHostが設定し、NavBackStackEntryのすべてのインスタンスがViewModelインスタンスに一貫して保存されるようにするものです(aosp/1111821)
バグの修正
- 複数の異なるナビゲーション グラフのスコープ設定された
ViewModelStoreインスタンスにアタッチされたViewModelインスタンスを使用する際のConcurrentModificationExceptionを修正しました(aosp/1112257)
バージョン 2.2.0-alpha02
2019 年 9 月 5 日
androidx.navigation:navigation-*:2.2.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
- クエリ パラメータを持つディープリンクが、順序の変更されたクエリ パラメータをサポートするようになりました。ディープリンクのマッチング時、デフォルト値を持つ引数または null 許容の引数が使用可能になりました(b/133273839)
NavController.getBackStackEntry()を呼び出して、バックスタック上のデスティネーションまたはナビゲーション グラフの ID を渡せるようになりました。返されるNavBackStackEntryは、ナビゲーション駆動のLifecycleOwner、ViewModelStoreOwner(NavController.getViewModelStoreOwner()で返されるものと同じ)、SavedStateRegistryOwnerを提供し、さらにそのデスティネーションの開始に使用する引数を提供します(aosp/1101691、aosp/1101710)
バグの修正
ViewPager2へのNavHostFragmentの追加がIllegalArgumentExceptionで失敗する問題を修正しました(b/133640271)NavInflaterが不必要にgetResourceName()を呼び出さないようになり、インフレート時間が最大 40% 高速化されました(b/139213740)
バージョン 2.2.0-alpha01
2019 年 8 月 7 日
androidx.navigation:navigation-*:2.2.0-alpha01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
NavController.getViewModelStoreOwner()によって返されるViewModelStoreOwnerでby navGraphViewModels()またはViewModelProviderコンストラクタを使用する際、SavedStateViewModelFactoryがデフォルト ファクトリになりました(b/135716331)
API の変更
- Navigation
2.1.0-rc01以降:2.1.0-alpha02で導入されたNavControllerで非推奨になったgetViewModelStore()API が削除されました。(aosp/1091021)
バグの修正
NavHostFragmentがFragmentContainerViewを使用するようになりました。これにより、アニメーションの Z-ordering の問題とフラグメントにディスパッチするウィンドウ インセットが修正されます(b/137310379)
バージョン 2.1.0
バージョン 2.1.0
2019 年 9 月 5 日
androidx.navigation:navigation-*:2.1.0 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
2.0.0 以降の重要な変更
- ViewModels をナビゲーション グラフにスコープ設定:
-ktxライブラリを使用する Kotlin ユーザーのby navGraphViewModels()プロパティ デリゲートを使用するか、またはNavControllerに追加されたgetViewModelStoreOwner()API を使用して、ナビゲーション グラフのレベルにスコープ設定された ViewModels を作成できるようになりました。詳しくは、デスティネーション間での UI 関連データの共有についての説明をご覧ください。 - ダイアログのデスティネーション:
navigateするときにDialogFragmentを表示する<dialog>のデスティネーションを作成できるようになりました。NavHostFragmentはデフォルトでダイアログのデスティネーションをサポートしています。詳しくは、DialogFragment からのデスティネーションの作成についての説明をご覧ください。 - URI による移動:
Uriを使用してnavigateできるようになりました。デスティネーションに追加した<deepLink>を使用して、そこに移動します。詳しくは、URI を使用した移動についての説明をご覧ください。 - NavHostController: カスタム
NavHostの作成で特に使用されていた API がNavHostControllerに移動し、ホストしているLifecycleOwner、OnBackPressedDispatcher、ViewModelStoreに、実装がNavControllerを接続できるようになりました。
バージョン 2.1.0-rc01
2019 年 8 月 7 日
androidx.navigation:navigation-*:2.1.0-rc01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
API の変更
2.1.0-alpha02で導入されたNavControllerで非推奨になったgetViewModelStore()API が削除されました。(aosp/1091021)
バージョン 2.1.0-beta02
2019 年 7 月 19 日
androidx.navigation:*:2.1.0-beta02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
2.1.0-beta01で導入された意図しない JaCoCo 依存関係を削除しました(b/137782950)
バージョン 2.1.0-beta01
2019 年 7 月 17 日
androidx.navigation:*:2.1.0-beta01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
NavigationUIは、ToolbarまたはCollapsingToolbarLayoutでsetupWithNavController()を使用するときに、Up ボタンの削除をアニメーション化するようになりました(b/131403621)
バグの修正
findNavController()を持つ同じコンテナで複数の NavHostFragments を使用する場合のタイミングの問題を修正しました(b/136021571)
バージョン 2.1.0-alpha06
2019 年 7 月 2 日
androidx.navigation:*:2.1.0-alpha06 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
- NavHostFragment で使用される
app:navGraph属性をnavigation-runtimeアーティファクトに移動しました。XML を介して追加できるカスタム ナビゲータでは、この属性を使用して Navigation Editor のホストパネルと統合する必要があります(b/133880955)
API の変更
ViewModelStoreOwnerを返す新しいgetViewModelStoreOwner()メソッドを優先して、NavControllerのgetViewModelStore()API を非推奨にしました(aosp/987010)<dialog>のデスティネーションなど、フローティング ウィンドウのデスティネーションの実装は、<dialog>のデスティネーションすべてに実装されるようになったマーカー インターフェースFloatingWindowに一般化されました。上部のアプリバーを操作する NavigationUI メソッドは、FloatingWindowのデスティネーションを無視するようになりました(b/133600763)
動作の変更
<dialog>のデスティネーションを使用している場合、Navigation の状態が画面に表示される状態と同期して正しく維持されるようになりました。結果として、<fragment>のデスティネーションなど、ダイアログ以外でアクティビティ以外のデスティネーションに移動すると、Navigation は自動的に<dialog>のデスティネーションをポップするようになりました(b/134089818)
バグの修正
- Navigation は、ディープリンクの処理時にアクティビティを再作成する場合に発生するアニメーションを抑制するようになりました。これにより、ビジュアル フラッシュが修正されます(b/130362979)
- 最初のフラグメントを追加するときにフラグメントをポップすると Navigation バックスタックが同期しなくなるバグを修正しました(b/133832218)
バージョン 2.1.0-alpha05
2019 年 6 月 5 日
androidx.navigation:*:2.1.0-alpha05 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
API の変更
NavControllerのホスト関連 API の名前を変更し、NavControllerの新しいサブクラスNavHostControllerに移動しました(aosp/966091)NavControllerのsetHostOnBackPressedDispatcherOwner()メソッドがNavHostControllerのsetOnBackPressedDispatcher()メソッドに置き換えられ、これを呼び出す前にsetLifecycleOwner()の呼び出しが必要になりました(aosp/965409)- 以前
setHostOnBackPressedDispatcherOwner()によって返されていたNavHostOnBackPressedManagerクラスを置き換えるenableOnBackPressed(boolean)メソッドがNavHostControllerに追加されました(aosp/966091)
バグの修正
- URI で移動した後にバックスタックが正しくないという問題を修正しました(b/132509387)
- NavController によって自動的に処理されるディープリンクが、一度だけトリガーされるようになりました(b/132754763)
バージョン 2.1.0-alpha04
2019 年 5 月 16 日
androidx.navigation:*:2.1.0-alpha04 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
NavHostFragmentがシステムの [戻る] ボタンのイベントをインターセプトする際に、app:defaultNavHostを正しく尊重するようになりました。これにより、Navigation2.1.0-alpha03での回帰が修正されます。b/132077777DialogFragmentNavigatorが、popBackStack()とnavigateUp()のオペレーションを正しく処理するようになりました。b/132576764- ネストされたグラフ間を繰り返し移動する場合の、
IllegalStateException: unknown destination during restoreの問題を修正しました。b/131733658
バージョン 2.1.0-alpha03
2019 年 5 月 7 日
androidx.navigation:*:2.1.0-alpha03 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
既知の問題
app:defaultNavHost="false"を指定しているにもかかわらず、NavHostFragment がシステムの [戻る] ボタンをインターセプトし続ける。b/132077777
新機能
navigateするときにDialogFragmentを表示する<dialog>のデスティネーションを作成できるようになりました。NavHostFragmentは、ダイアログのデスティネーションをデフォルトでサポートしています。b/80267254- リソース ID または
NavDirectionsインスタンスでnavigateを呼び出すだけでなく、Uriを介して移動できるようになりました。デスティネーションに追加した<deepLink>を使用して正しいデスティネーションに移動できます。b/110412864
動作の変更
- NavigationUI が提供するデフォルトのアニメーションが、アクティビティとフラグメントのデフォルトのアニメーション速度に合わせて、400 ミリ秒から 220 ミリ秒に高速化されました。b/130055522
API の変更
NavHostFragmentのcreateFragmentNavigator()メソッドを非推奨にし、その機能を新しいonCreateNavController()メソッドに移動しました。これは、NavHostFragmentのサブクラス化の際にカスタム ナビゲータを追加する正しいエントリ ポイントであることを明確にするためです。b/122802849hasDeepLink()メソッドがNavDestinationに追加され、指定のUriがそのデスティネーションで処理できるかどうか、または、NavGraphの場合はナビゲーション グラフの任意のデスティネーションで処理できるかどうかを確認できるようになりました。b/117437718
バグの修正
- デフォルトの引数が
OnDestinationChangedListenerインスタンスに正しく渡されるようになりました。b/130630686 NavHostFragmentが、OnBackPressedDispatcherを使用してシステムの Back イベントをインターセプトするようになりました。これにより、フラグメントに戻る際にフラグメント ライフサイクル メソッドで条件付き移動を行う場合の問題が修正されます。b/111598096- Safe Args では、
app:argTypeを指定されていないandroid:defaultValue=”@null”がstring引数として適切に推定されるようになりました。b/129629192
バージョン 2.1.0-alpha02
2019 年 4 月 3 日
androidx.navigation:*:2.1.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
- Kotlin ユーザーの
by navGraphViewModels()プロパティ デリゲートを介して、またはNavControllerに追加されたgetViewModelStore()API を使用して、ナビゲーション グラフのレベルにスコープ設定された ViewModel を作成できるようになりました。b/111614463
API の変更
app:targetPackageを<activity>のデスティネーションに追加して、一致するパッケージ名を制限できるようになりました。パッケージを独自のアプリ ID に制限するapp:targetPackage="${applicationId}"をサポートしています。b/110975456
バグの修正
<activity>のデスティネーションのandroid:nameは、インフレート時に Class に解析されなくなりました。これにより、動的機能を使用するときに ClassNotFoundExceptions が防止されます。b/124538597
バージョン 2.1.0-alpha01
2019 年 3 月 19 日
これは Navigation 2.1.0 の最初のアルファ版リリースです。
依存関係の変更
- Navigation は
androidx.core:core:1.0.1とandroidx.fragment:fragment:1.1.0-alpha05に依存するようになりました。また、このリリースでandroidx.legacy:legacy-support-core-utils:1.0.0への依存関係が削除されました。b/128632612
API の変更
- リソース ID と Bundle でクリック リスナーを作成する代替手段として、新しい
Navigation.createNavigateOnClickListener(NavDirections)メソッドが追加されました。 b/127631752 FragmentNavigator.instantiateFragmentが非推奨になりました。デフォルトの実装は、FragmentFactoryを使用してフラグメントをインスタンス化するようになりました。b/119054429
バグの修正
- デスティネーションにアタッチされた引数がある場合に Navigation は null
Bundleを送信しなくなり、android:defaultValue="@null"を使用する際の問題が解決されました。b/128531879 - Safe Args が KotlinPoet 1.1.0 に依存するようになり、非常に長いパッケージ名に関する問題が解決されました。b/123654948
バージョン 2.0.0
バージョン 2.0.0
2019 年 3 月 14 日
Navigation 2.0.0 がリリースされました。2.0.0-rc02 からの変更はありません。
バージョン 2.0.0-rc02
2019 年 3 月 6 日
Navigation 2.0.0-rc02 は androidx.navigation グループ ID を持つ新しいアーティファクトを提供するようになり、その依存関係が AndroidX の同等の依存関係に変更されました。
Navigation 2.0.0-rc02 の動作は 1.0.0-rc02 の動作と同じです。新しい依存関係に一致するように依存関係を更新する場合を除き、1.0.0-rc02 からアップデートするためにコードを変更する必要はありません。
Navigation の 2.X リリースを使用するには、プロジェクトが AndroidX に移行されている必要があります。Navigation 1.0 安定版は、サポート ライブラリの依存関係を使用する最後のリリースになります。1.0 より後の開発はすべて AndroidX をベースとし、2.0 安定版リリースを基にビルドされます。
AndroidX 以前の依存関係
AndroidX 以前のバージョンの Navigation では、次の依存関係を含めます。
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
Safe Args では、次のクラスパスを最上位の build.gradle ファイルに追加します。
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
バージョン 1.0.0
バージョン 1.0.0
2019 年 3 月 14 日
Navigation 1.0.0 がリリースされました。1.0.0-rc02 からの変更はありません。
バージョン 1.0.0-rc02
2019 年 2 月 26 日
これは Navigation の 1.0.0 安定版リリースの 2 番目のリリース候補です。このリリースには、バグの修正がいくつか含まれています。
バグの修正
- ルートグラフに ID がない場合に
popBackStack()が無視される問題を修正しました。b/126251695 navigateUp()が、FLAG_ACTIVITY_NEW_TASKなしでディープリンクを処理した後に呼び出された場合に、アプリのタスクに戻るナビゲーションを正しく処理するようになりました。b/126082008ActivityNavigator.applyPopAnimationsToPendingTransitionで適切なポップ終了アニメーションが適用されない問題を修正しました。b/126237567- Safe Args によって生成される Kotlin コードが、
Rクラスに関連付けられたパッケージ名のinやfunなどの Kotlin キーワードを適切にエスケープするようになりました。b/126020455
バージョン 1.0.0-rc01
2019 年 2 月 21 日
これは、Navigation の 1.0.0 安定版リリースのリリース候補です。このリリースにはバグの修正が 1 つ含まれています。
バグの修正
- フラグメントと
singleTopのナビゲーション オペレーションを使用する際の問題を修正しました。b/124294805
バージョン 1.0.0-beta02
2019 年 2 月 12 日
このリリースには、いくつかのマイナーな改善と重要なバグの修正が含まれています。
新機能
reference引数のandroid:defaultValueとして0を使用できるようになりました。b/124248602
動作の変更
- ディープリンクの完全一致が、
.*または引数の一致よりも優先されるようになりました。b/123969518
バグの修正
popBackStack()とnavigateUpが、バックスタックの最後のデスティネーションをポップするときにfalseを正しく返すようになりました。これにより、1.0.0-beta01で発生した回帰が修正されます。b/123933201- Navigation が、保存されたインスタンス状態を復元する際に
ClassLoaderを正しく設定するようになりました。これにより、Navigatorの保存された状態またはNavDestinationに送信された引数でカスタムクラスを使用する場合の問題が回避されます。b/123893858 - Safe Args で生成された NavArgs クラスが、保存されたインスタンスの状態から
Parcelable[]引数を復元する際にクラッシュしなくなりました。b/123963545 - Safe Args が、不必要に生成された Kotlin クラスを適切にクリーンアップするようになりました。b/124120883
バージョン 1.0.0-beta01
2019 年 2 月 4 日
これは Navigation の最初のベータ版リリースです。今後、重大な問題がない限り、Navigation API は次のバージョンまで安定版として使用される予定です。このリリースにはバグの修正と動作の変更がいくつか含まれています。
動作の変更
- Navigation において、引数のデフォルト値が実行時と Safe Args で同等に扱われるようになりました。その結果、別のリソース(たとえば
@color/colorPrimary)を指すデフォルト値を持つことができる引数は、app:argType="reference"を指定されたもののみに限定されます。別のapp:argTypeで参照のデフォルト値を使用しようとすると、ナビゲーション XML の解析時に例外が発生します。b/123551990 - Safe Args は Android Gradle プラグイン 3.3.0 に依存するようになりました。aosp/888413
- Safe Args は Kotlin 1.3.20 に依存するようになりました。aosp/888414
バグの修正
- Safe Args が、すべてのバージョンの Android Gradle プラグインのライブラリと機能モジュールで使用可能になりました。b/121304903
- 単一の
popBackStack()オペレーションで、一度に 1 つのデスティネーションだけではなく、デスティネーションのすべてのコピーがバックスタックの一番上からポップされる回帰を修正しました。b/123552990 FragmentNavigator状態がNavControllerの状態と同期しなくなり、バックスタックを復元しようとするとIllegalStateExceptionが発生する問題を修正しました。b/123803044- 難読化で ProGuard を使用する場合に、
NavigationUIで処理された戻る矢印が表示されない問題を修正しました。b/123449431 - Safe Args によって生成されたコードが、
.OuterClass$InnerClass形式の静的内部クラスを指すapp:argTypeの使用を適切に処理するようになりました。b/123736741 - Safe Args によって生成された Java コードが、グローバル アクションと深くネストされたデスティネーションを適切に処理するようになりました。b/123347762
バージョン 1.0.0-alpha11
2019 年 1 月 23 日
これは、Safe Args の問題を修正する 1.0.0-alpha10 のホットフィックス リリースです。
バグの修正
- Safe Args が、グローバル アクションに関連付けられた Directions クラスをインポートできない問題を修正しました。b/123307342
バージョン 1.0.0-alpha10
2019 年 1 月 23 日
既知の問題
- Safe Args は、グローバル アクションに関連付けられた Directions クラスをインポートできません。b/123307342
このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「互換性を破る変更」をご覧ください。
新機能
- Kotlin ユーザーは
by navArgs()プロパティのデリゲートを使用して、ActivityまたはFragmentで、Safe Args が生成したNavArgsクラスへの参照を必要に応じて取得できるようになりました。b/122603367 - Safe Args で、
androidx.navigation.safeargs.kotlinプラグインを適用して Kotlin コードを生成できるようになりました。Kotlin コードは、以前のandroidx.navigation.safeargsプラグインを介してまだ利用可能なビルダー パターンにデフォルトの引数と不変クラスを使用して、Kotlin 専用のモジュールとしてビルドされます。b/110263087
動作の変更
- ディープリンクのマッチングで、一致する引数が最も多いディープリンクが優先されるようになりました。b/118393029
NavControllerでsetGraph()を呼び出すと、バックスタックがリセットされるようになりました。b/111450672- 不明なディープリンクは
IllegalStateExceptionをスローするのではなく、無視されるようになりました。これにより、ネストされた(または複数の)NavHostFragmentでの問題が解決されます。b/121340440
互換性を破る変更
- アクティビティにポップ アニメーションを適用する
NavOptions.applyPopAnimationsToPendingTransition()メソッドがActivityNavigatorに移動されました。b/122413117 - Safe Args が、引数のないアクションの同一クラスの重複を回避するようになりました。生成された NavDirections クラスの、引数のないメソッドの戻り値の型が
NavDirectionsになりました。b/123233147 - Safe Args によって生成される Directions クラスに、パブリック コンストラクタがなくなりました。生成された静的メソッドのみを使用する必要があります。b/123031660
- Safe Args によって生成される
NavDirectionsクラスに、パブリック コンストラクタがなくなりました。このようなクラスは、生成された Directions クラスの静的メソッドでのみ生成する必要があります。b/122963206 NavDirectionsのgetArguments()から返されたBundleが、@Nullableではなく@NonNullとしてマークされるようになりました。b/123243957
バグの修正
NavDeepLinkBuilderが、渡された引数を使用して一意性を判断することにより、同じデスティネーションへの複数の同時PendingIntentを正しく処理するようになりました。b/120042732NavControllerが、ネストされたNavHostFragmentまたは他の子フラグメントをバックスタックとともに使用する場合に、popBackStack()オペレーションを正しく処理するようになりました。b/122770335NavigationUIが、Up ボタンのコンテンツ説明を正しく設定するようになりました。b/120395362- Safe Args で生成された Directions クラスが、デスティネーションのアクションと同じ ID を持つグローバル アクションを正しく処理するようになりました。b/122962504
- Safe Args で生成された
NavDirectionsクラスが、equals()が true を返す場合に、等しいhashCode()値を持つようになりました。b/123043662 NavHostFragmentのFragmentManagerでカスタムのFragmentTransactionsを実行しようとした場合に、FragmentNavigatorが適切なエラー メッセージをスローするようになりました。常にgetChildFragmentManager()を使用する必要があります。b/112927148
バージョン 1.0.0-alpha09
2018 年 12 月 18 日
このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「互換性を破る変更」をご覧ください。
android.arch.navigation:navigation-testing アーティファクトの開発は継続しないこととなりました。このアーティファクトが NavController の内部テストに役立つことは実証済みですが、別のテスト戦略(navigate() が適切に呼び出されることを確認するために NavController インスタンスをモックするなど)を採用することを強くおすすめします。このアプローチは、AndroidDevSummit 2018 での単一アクティビティに関する講演で詳しく説明されています。また、Navigation を使用したテスト用の補足ドキュメントの作成が予定されています。
新機能
menuCategory="secondary"を指定したMenuItemは、NavigationUIのメソッドとともに使用した場合に、バックスタックをポップしなくなりました。b/120104424AppBarConfigurationを使用して、navController.navigateUp()がfalseを返したときに呼び出される代替のOnNavigateUpListenerインスタンスを設定できるようになりました。b/79993862、b/120690961
互換性を破る変更
argType="reference"を指定して<argument>を使用した場合、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになりました。b/111736515setupメソッドに合わせて、onNavDestinationSelected()ではデフォルトでナビゲーション グラフの開始デスティネーションにポップで戻るようになりました。バックスタックがポップされないようにするには、menuCategory="secondary"をMenuItemに追加してください。aosp/852869- 生成された
ArgsクラスのfromBundle()メソッドが、null 許容のBundleではなく、非 null のBundleを受け取るようになりました。aosp/845616
バグの修正
- ディープリンクから引数が常に文字列として解析されるのではなく、正しい
argTypeとして適切に解析されるようになりました。b/110273284 - Navigation がそのパブリック リソースを適切にエクスポートするようになりました。b/121059552
- Safe Args に Android Gradle プラグイン 3.4 Canary 4 以上との互換性が備わりました。b/119662045
バージョン 1.0.0-alpha08
2018 年 12 月 6 日
このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「互換性を破る変更」をご覧ください。
新機能
- デスティネーションのラベルを
NavigationUIのメソッドで使用した場合、android:labelの{argName}インスタンスが自動的に正しい引数で置き換えられるようになりました。b/80267266 - Navigation がサポート ライブラリ 28.0.0 に依存するようになりました。b/120293333
互換性を破る変更
OnNavigatedListenerの名前がOnDestinationChangedListenerに変更されました。b/118670572OnDestinationChangedListenerが引数のBundleも渡すようになりました。aosp/837142app:clearTask属性とapp:launchDocument属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべてのデスティネーションを削除するには、グラフのルートを指定してapp:popUpToを使用してください。b/119628354ActivityNavigator.ExtrasがBuilderパターンを使用するようになり、任意のIntent.FLAG_ACTIVITY_フラグを設定する機能が追加されました。aosp/828140NavController.onHandleDeepLinkの名前がhandleDeepLinkに変更されました。aosp/836063- サブクラス化を想定していない多数のクラスとメソッド(
NavOptions、NavInflater、NavDeepLinkBuilder、AppBarConfigurationなど)がfinalに設定されました。aosp/835681 - 非推奨になった
NavHostFragment.setGraph()メソッドが削除されました。aosp/835684 - 非推奨になった
NavigationUI.navigateUp(DrawerLayout, NavController)メソッドが削除されました。aosp/835684 - フラグメント作成機能が
FragmentNavigatorに移動され、フラグメントの作成を簡単にFragmentFactoryにデリゲートできるようになりました。b/119054429 NavGraphNavigatorのコンストラクタがContextを取得しなくなりました。aosp/835340- NavigatorProvider がインターフェースではなくクラスになりました。
getNavigatorProvider()から返されるNavigatorProviderの機能は変更されていません。aosp/830660 NavDestination.navigate()を削除しました。代わりに、Navigatorでnavigate()を呼び出してください。aosp/830663Navigatorの大幅なリファクタリングが行われ、OnNavigatorNavigatedListenerが不要になりました。代わりに、navigateが移動先のNavDestinationを返すようになりました。NavigatorインスタンスがポップイベントをNavControllerに送信できなくなりました。[戻る] ボタンの押下をインターセプトしてnavController.popBackStack()を呼び出す場合は、OnBackPressedCallbackの使用を検討してください。aosp/833716
バグの修正
- デスティネーションが
<navigation>要素の場合、常にpopUpToが動作するようになりました。b/116831650 - ネストされたグラフを使用した場合に
IllegalArgumentExceptionが発生する各種のバグを修正しました。b/118713731、b/113611083、b/113346925、b/113305559 <activity>のデスティネーションのdataPattern属性では、toString()を呼び出して文字列以外の引数から引数を設定するようになりました。b/120161365
Safe Args
- Safe Args がシリアル化可能なオブジェクト(列挙値など)をサポートするようになりました。列挙型では、クラス名を指定せずに列挙リテラルをそのまま使用することによって、デフォルト値を設定できます(例:
app:defaultValue="READ")。b/111316353 - Safe Args がサポート対象のすべての型の配列をサポートするようになりました。b/111487504
- Safe Args ではリソース ディレクトリのサブフォルダが無視されるようになりました。b/117893516
- Safe Args では必要に応じて、
@Overrideアノテーションが追加されるようになりました。b/117145301
バージョン 1.0.0-alpha07
2018 年 10 月 29 日
新機能
- 新しい AppBarConfiguration クラスを使用して、どのデスティネーションが最上位のデスティネーションと見なされるかをカスタマイズできるようになりました。詳しくは、更新されたドキュメントをご覧ください。b/117333663
- グラフの最初のデスティネーションに引数を渡せるようになりました。b/110300470
- ディープリンクが、ピリオド、ハイフン、プラス記号を含むカスタム形式をサポートするようになりました。b/112806402
互換性を破る変更
navigation-testing-ktxモジュールがnavigation-testing artifactに組み込まれ、公開されなくなりました。navigation-testingアーティファクトが Kotlin 標準ライブラリに依存するようになりました。Kotlin の規則との整合性を強化するために API が変更されましたが、Java で作成されたテストでは API を引き続き使用できます。- メタデータ マニフェストで登録されたナビゲーション グラフがサポートされなくなりました。b/118355937
- アクションを <activity> のデスティネーションにアタッチできなくなりました。aosp/785539
バグの修正
- ディープリンクがクエリ パラメータを正しく解析できるようになりました。b/110057514
- アクティビティのデスティネーションが開始と終了のすべてのアニメーションに正しく適用されるようになりました。b/117145284
- カスタム ナビゲータを使用している場合に構成の変更後に発生するクラッシュを解決しました。b/110763345
Safe Args
- Safe Args は Android Gradle プラグイン 3.2.1 に依存するようになりました。b/113167627
- 内部クラス用の Directions を生成できるようになりました。b/117407555
- <include> グラフへの Directions の生成に関する問題を修正しました。b/116542123
バージョン 1.0.0-alpha06
2018 年 9 月 20 日
新機能
- フラグメントとアクティビティの共有要素の遷移のデスティネーションがサポートされるようになりました(b/79665225)。詳細については、Navigation アーキテクチャ コンポーネントを使用したナビゲーションの実装に関するガイドをご覧ください。
NavigationViewのアイテムを選択した場合、下部シートを含むすべてが閉じるようになりました。b/112158843
API の変更
- 互換性を破る変更: ナビゲータの
navigate()メソッドがNavigator.Extrasパラメータを受け取るようになりました。 - NavController の
getGraph()メソッドがNonNullになりました。b/112243286
バグの修正
NavigationUI.setupWithNavController()を各デスティネーションからビューとともに使用する場合、ビューがリークしなくなりました。b/111961977- ナビゲータの
onSaveState()が一度だけ呼び出されるようになりました。b/112627079
Safe Args
- ナビゲーション先の Directions クラスによってその親の Directions クラス(存在する場合)が拡張されるようになりました。b/79871405
- Directions クラスと Args クラスに、便利な
toString()の実装が追加されました。b/111843389
バージョン 1.0.0-alpha05
2018 年 8 月 10 日
バグの修正
- 不正なバックスタック動作を引き起こすバグを修正しました。b/111907708
- 生成された Args クラスの
equals()のバグを修正しました。b/111450897 - Safe Args のビルドエラーを修正しました。b/109409713
- リソース ID から Java 名への変換を修正しました。b/111602491
- Safe Args プラグインの null 可能性に関するエラー メッセージを修正しました。
- 不足している null 可能性アノテーションを追加しました。
バージョン 1.0.0-alpha04
2018 年 7 月 19 日
Navigation 1.0.0-alpha04 と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。
API / 動作の変更
- NavHostFragment では常に、現在のフラグメントがメインのナビゲーション フラグメントとして設定され、外部の NavController がポップされる前に子フラグメント マネージャーがポップされるようになります。b/111345778
Safe Args
- 互換性を破る変更:
app:typeが、他のライブラリ(ConstraintLayout 2.0.0-alpha1 など)との競合を避けるために、app:argTypeに変更されました。b/111110548 - Safe Args からのエラー メッセージをクリックできるようになりました。b/111534438
- Args クラスでは、
NonNull属性が実際に null ではないことが確認されるようになりました。b/111451769 - NavDirections と Args によって生成されたクラスに
NonNullアノテーションが追加されました。b/111455455、b/111455456
バグの修正
- フラグメントのデスティネーションにディープリンクした後に発生する、システムの [戻る] ボタンに関する問題を修正しました。b/111515685
バージョン 1.0.0-alpha03
2018 年 7 月 12 日
Navigation 1.0.0-alpha03 と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。
API / 動作の変更
- ツールバー用の NavigationUI.setupWithNavController メソッドが追加されました。b/109868820
- CollapsingToolbarLayout 用の NavigationUI.setupWithNavController メソッドが追加されました。b/110887183
- バックスタックが空の場合、または特定のデスティネーション ID がバックスタック内にない場合に、popBackStack() から false が返されるようになりました。b/110893637
- FragmentManager が状態を保存した後に、FragmentNavigator においてナビゲーション操作が無視されるようになったことで、「Can not perform this action after onSaveInstanceState」例外を回避できるようになりました。b/110987825
Safe Args
- 互換性を破る変更: アクション名と引数名に含まれる英数字以外の文字が、それぞれの NavDirections メソッドの名前でキャメルケースに置き換えられます。
- 例:
DemoController.indexはsetDemoControllerIndexになります。b/79995048 - 例:
action_show_settingsはactionShowSettingsになります。b/79642240
- 例:
- 互換性を破る変更: デフォルトでは、引数が null ではないと見なされるようになりました。文字列と Parcelable の引数に null 値を許可するには、
app:nullable="true"を追加します。b/79642307 - 「123L」の形式で defaultValues を指定して、
app:type="long"を使用できるようになりました。b/79563966 - Parcelable の引数がサポートされるようになりました(
app:typeには完全修飾クラス名を使用します)。サポートされる唯一のデフォルト値は"@null"です。b/79563966 - Args クラスに
equals()とhashCode()が実装されました。b/79642246 - Safe Args プラグインをライブラリ プロジェクトに適用できるようになりました。b/80036553
- Safe Args プラグインを機能プロジェクトに適用できるようになりました。b/110011752
バグの修正
- フラグメントのライフサイクル メソッドでのナビゲーションの際に発生する問題を修正しました。b/109916080
- ネストされたグラフを介して複数回ナビゲーションする際に発生する問題を修正しました。b/110178671
- グラフで最初のデスティネーションを指定して
setPopUpToを使用する場合に発生する問題を修正しました。b/109909461 app:defaultValueのすべての値が文字列として渡されていた問題を修正しました。b/110710788- Android Gradle プラグイン 3.2 Beta 01 にバンドルされている aapt2 で、Navigation XML ファイル内のすべての
android:name属性に関する保持ルールが追加されました。b/79874119 - デフォルトの FragmentNavigator を置き換える際に発生するメモリリークを修正しました。b/110900142
バージョン 1.0.0-alpha02
2018 年 6 月 7 日
動作の変更
FragmentNavigatorはsetReorderingAllowed(true)を使用するようになりました。b/109826220Navigation で、ディープリンク URL から解析された引数が URL デコードされるようになりました。b/79982454
バグの修正
フラグメントのライフサイクル メソッドから Navigation を呼び出す場合に発生する
IllegalStateExceptionを修正しました。b/79632233Navigation がサポート ライブラリ 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903
defaultNavHost="true" を子フラグメントとして使用する場合に発生する
IllegalArgumentExceptionを修正しました。b/79656847NavDeepLinkBuilder を使用する場合に発生する
StackOverflowErrorを修正しました。b/109653065ネストされたグラフに戻る際に発生する
IllegalArgumentExceptionを修正しました。b/80453447launchSingleTopを使用する場合にフラグメントが重なる問題を修正しました。b/79407969Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。b/79734195
NavigationUI で、ネストされたグラフを
MenuItemとして使用する場合に適切なアイテムをハイライト表示できるようになりました。b/109675998
API の変更
アクションの
clearTask属性と、NavOptionsの関連する API が非推奨になりました。b/80338878アクションの
launchDocument属性と、NavOptionsの関連する API が非推奨になりました。b/109806636
バージョン 1.0.0-alpha01
2018 年 5 月 8 日
Navigation は、アプリ内ナビゲーションを作成するためのフレームワークを提供します。この初回リリースは 1.0.0-alpha01 です。