ナビゲーション

Navigation は、Android アプリ内の「デスティネーション」間を移動するためのフレームワークであり、デスティネーションがフラグメントやアクティビティなど、どのコンポーネントとして実装されているかにかかわらず、一貫した API を提供します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 9 月 4 日 2.8.0 - - -

依存関係の宣言

Navigation への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
  def nav_version = "2.8.0"

  // 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"

}

Kotlin

dependencies {
  val nav_version = "2.8.0"

  // 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")

}

Safe Args

Safe Args をプロジェクトに追加するには、最上位の build.gradle ファイルに次の classpath を含めます。

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.8.0"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.8.0"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

また、使用可能な 2 つのプラグインのいずれかを適用する必要があります。

Java モジュールまたは Java と Kotlin の混合モジュールに適した Java 言語コードを生成するには、アプリまたはモジュールbuild.gradle ファイルに次の行を追加します。

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

あるいは、Kotlin のみのモジュールに適した Kotlin コードを生成するには、次の行を追加します。

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

AndroidX への移行にあるとおり、gradle.properties ファイルandroid.useAndroidX=true が必要です。

Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 2.8

バージョン 2.8.0

2024 年 9 月 4 日

androidx.navigation:navigation-*:2.8.0 がリリースされました。バージョン 2.8.0 に含まれる commit については、こちらをご覧ください。

2.7.0 以降の重要な変更

Navigation Kotlin DSL 型安全性

  • Navigation では、Kotlin Serialization を使用して 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 アニメーションから新しい SeekableTransitionState API を介して予測型アプリ内「戻る」をサポートできるようになりました。これにより、「戻る」ジェスチャーを使用して、カスタム移行で前のデスティネーションを確認した後、完了した操作でトランザクションを commit するかキャンセルするかを決定できます。

Navigation Fragment コンポーズ可能な関数

  • NavHostFragment に代わる ComposableNavHostFragment を含む新しい navigation-fragment-compose アーティファクトを追加しました。これにより、コンポーザブルのデスティネーションを Navigation XML ファイルに追加できます。各 composable デスティネーションは、完全修飾名を各デスティネーションの android:name 属性として使用する、トップレベルの引数のない @Composable メソッドとして表現する必要があります。これらのデスティネーションのいずれかに移動すると、コンポーズ可能なコンテンツを表示するために、包含フラグメントが作成されます。
  // 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 配列(IntArrayTypeLongArrayTypeFloatArrayTypeBoolArrayTypeStringArrayType)はすべて、この新しいクラスを継承するようになりました。
  • NavType に、整数、文字列、ブール値、浮動小数点数、Long のリストが組み込みでサポートされるようになりました。

バージョン 2.8.0-rc01

2024 年 8 月 21 日

androidx.navigation:navigation-*:2.8.0-rc01 がリリースされました。バージョン 2.8.0-rc01 に含まれるこちらの commit については、

バグの修正

  • トップレベルの列挙型クラスをタイプセーフな引数として渡すときのナビゲーションのクラッシュを修正。(I0ba76b/358137294)。
  • Navigation 2.8 は SDK 34 で正しく機能し、2.9 のリリースまで、他の AndroidX ライブラリとともに 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 により、別のクラスにネストされた列挙型のみがデフォルトでサポートされます。トップレベルの列挙型は次のリリースでサポートされる予定です。

バグの修正

  • 重複または共有しているデスティネーションに移動する場合、ナビゲーションは、グラフ内の現在の位置から最も近いデスティネーションへの移動を優先します。(Ic89a4b/352006850)。
  • Safe Args のナビゲーションに新しい NavType.EnumType が追加されました。つまり、Enum 型はカスタム NavType が不要になりました。EnumSerialName は、デフォルトの完全修飾名にする必要があります。(I66d22b/346475493)。
  • Safe Args のナビゲーションに、Int?Long?Float?Boolean?Enum<*>? などの null 値許容の引数型の組み込みサポートが追加されました。(I32d13I1c580Ifba66I978b0Ide076b/351994237)。
  • NavGraph に渡された startDestination ルートが startDestination.route と完全に等しい場合、NavGraphstartDestination はデフォルトの引数値を使用するようになりました。(I13762b/354046047)。

バージョン 2.8.0-beta06

2024 年 7 月 24 日

androidx.navigation:navigation-*:2.8.0-beta06 がリリースされました。バージョン 2.8.0-beta06 に含まれる commit については、こちらをご覧ください。

バグの修正

  • WrongStartDestinationType lint チェックで、渡されたクラスタイプの Companion オブジェクトが確認されず、lint がエラーを検出できない問題を修正しました。(I92b09)。

バージョン 2.8.0-beta05

2024 年 7 月 10 日

androidx.navigation:navigation-*:2.8.0-beta05 がリリースされました。バージョン 2.8.0-beta05 に含まれる commit については、こちらをご覧ください。

バグの修正

  • ネストされた NavGraphs が同じ startDestination ルートを共有する場合に singleTop ナビゲーションがクラッシュする問題を修正しました。(I17b94b/294408596)。

バージョン 2.8.0-beta04

2024 年 6 月 26 日

androidx.navigation:navigation-*:2.8.0-beta04 がリリースされました。バージョン 2.8.0-beta04 に含まれる commit については、こちらをご覧ください。

バグの修正

  • Navigation で、パス引数に空の文字列を使用した移動がサポートされるようになりました。(Ic5dbdb/339481310)。
  • @Serializable(with =...) を介してクラス フィールドで直接宣言されたカスタム シリアライザのエラー メッセージを改善し、現在サポートされていない機能であることを明確にしました。(I052b0b/341319151)。
  • SavedStateHandleFactory テスト API を Android 以外のテストで使用できるようになりましたが、バンドルによる引数の解析をサポートするには Robolectric が必要です。(I76cdcb/340966212)。
  • Compose で Type-Safe Navigation を使用してプロセス終了後にアプリを再開すると、状態を復元するクラッシュを修正しました。(Ia8f38b/341801005)。
  • 予測型「戻る」ジェスチャーをキャンセルした後、ユーザーが戻る NavBackStackEntryRESUMED のライフサイクル状態に戻らないという Navigation Compose の問題を修正しました。また、これにより、戻りデスティネーションは、フリング後に所定の位置にスナップされるのではなく、正しいアニメーションで戻ります。(I97a0cb/346608857)。
  • Navigation Compose で予測型「戻る」を使用する場合、ポップされるデスティネーションに適切な Z オーダーが設定され、受信デスティネーションの上に正しくアニメーション表示されます。(I2077bb/345993681)。

バージョン 2.8.0-beta03

2024 年 6 月 12 日

androidx.navigation:navigation-*:2.8.0-beta03 がリリースされました。バージョン 2.8.0-beta03 に含まれる commit については、こちらをご覧ください。

API の変更

  • CollectionNavType に新しい抽象 emptyCollection() メソッドが追加されました。これをオーバーライドして、引数として渡された空のコレクションを処理します。(Ie4d84b/341723133)。

バグの修正

  • NavType.serializeAsValueserializeAsValues に関するドキュメントを追加し、最終出力を URI エンコードする必要があることを強調しました。(Ida6bdb/344943214)。
  • null の CollectionNavType 引数で toRoute<T> を呼び出すとクラッシュする問題を修正しました。null の CollectionNavType で移動する場合、出力引数は、Serializable クラスで宣言されたデフォルト値になります。デフォルト値がない場合は、emptyCollection() の戻り値になります。(I84158Id630fb/342672856)。

バージョン 2.8.0-beta02

2024 年 5 月 29 日

androidx.navigation:navigation-*:2.8.0-beta02 がリリースされました。バージョン 2.8.0-beta02 に含まれる commit については、こちらをご覧ください。

バグの修正

  • null 値許容のカスタム NavTypeNavBackStackEntry.toRoute を使用した場合の ClassCastException のクラッシュを修正しました。(I1c29bb/342239473)。
  • 現在のデスティネーションから ID 経由で到達できないバックスタック エントリを復元しようとしたときに発生する Navigation バックスタックの状態の復元に関する問題を修正しました。ルートは ID に基づいているため、ルートを使用して構築されたデスティネーションも影響を受けました。これにより、根本的な同じ問題を引き起こした clearBackStack() の呼び出しによって引き起こされるクラッシュも修正されます。(I423c3b/339908057)。

バージョン 2.8.0-beta01

2024 年 5 月 14 日

androidx.navigation:navigation-*:2.8.0-beta01 がリリースされました。バージョン 2.8.0-beta01 に含まれる commit については、こちらをご覧ください。

API の変更

  • SavedStateHandle.toRoute() がカスタム引数型の typeMap パラメータを受け取るようになりました。(Ie39fbb/339026523)。
  • Kotlin の Serializable オブジェクトから SavedStateHandle を作成するためのテスト API を navigation-testing に追加しました。(Id4867b/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 Serialization に基づく Navigation ComposeNavigation Kotlin DSL のユーザーのコンパイル時の型安全性をサポートする作業が完了し、以前の試験運用版の API が安定版になりました。

この機能は Kotlin シリアル化を使用して、型安全性を持つオブジェクトとデータクラスを介してナビゲーション グラフにデスティネーションを定義できるようにします。

  // 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 に、整数、文字列、ブール値、浮動小数点数、Long のリストが組み込みでサポートされるようになりました。(I4b6ddIa914cb/188693139)。

バージョン 2.8.0-alpha07

2024 年 4 月 17 日

androidx.navigation:navigation-*:2.8.0-alpha07 がリリースされました。バージョン 2.8.0-alpha07 に含まれる commit については、こちらをご覧ください。

新機能

  • 新しい navigation-fragment-compose アーティファクトが追加されました。このアーティファクトには、NavHostFragment に代わる ComposableNavHostFragment が含まれています。これにより、Navigation XML ファイルに composable デスティネーションを追加できるようになります。各 composable デスティネーションは、完全修飾名を各デスティネーションの android:name 属性として使用する、トップレベルの引数のない @Composable メソッドとして表現する必要があります。これらのデスティネーションのいずれかに移動すると、コンポーズ可能なコンテンツを表示するために、包含フラグメントが作成されます。(I0ef2eb/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 サーフェス全体が完成すると削除される予定です。(Iefd95I409c8I5b5acI7e753I960f8I3eabdI8ed5aIed2c9I9b73cI9b73cI554db29}、I554db29I554db29I3eabdI554db29}

バージョン 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 サーフェス全体が完成すると削除されます。

バグの修正

  • NavHost で、デフォルトの contentAlignment 引数として Alignment.TopStart が使用されるようになりました。これにより、AnimatedContent のデフォルトに合わせ、中央遷移からの予期しないスケールのインスタンスが修正されました。(I09e72b/330111602)。
  • Navigation Compose の使用中に予測型「戻る」ジェスチャーをフリックすると、NavHost がカスタム遷移をすぐに終了するのではなく、正しく完了するようになりました。(I99017b/327292110)。

バージョン 2.8.0-alpha05

2024 年 3 月 20 日

androidx.navigation:navigation-*:2.8.0-alpha05 がリリースされました。バージョン 2.8.0-alpha05 に含まれる commit については、こちらをご覧ください。

新機能

  • defaultValue に依存せずに、startDestination ルートで NavGraphstartDestination に引数を直接渡すことができるようになりました。これは、ネストされた NavGraph startDestinations にも適用されます。(I0e0b5b/109505019b/188693139)。

API の変更

  • リスト、配列、マップなどのコレクション ベースの引数用の NavType<T> のサブクラスである、新しい抽象 CollectionNavType<T> クラスを追加しました。(Ic6d63b/188693139)。
  • デフォルトの NavType 配列(IntArrayTypeLongArrayTypeFloatArrayTypeBoolArrayTypeStringArrayType)がすべて CollectionNavType 型になりました。(Idcf79b/188693139
  • NavType で、同じ型の 2 つの値が互いに等しいかどうかを判別する新しいオープン valueEquals API が提供されるようになりました。(I6cb97b/327229511)。

バグの修正

  • ディープリンクのクエリ パラメータで、文字列ベースの NavTypes の有効な値として、引数名を中かっこで囲む形式({argName} など)を使用できるようになりました。これにより、このような値がすべての型で無効(または値が存在しない)とみなされる問題が修正されます。(I18302b/327274038)。
  • navigatepopBackStack などのルートをサポートする NavController 関数で、配列 NavTypes の引数が入力されたルートを適切にマッチングできるようになりました。(Iea805b/327229511)。

バージョン 2.8.0-alpha04

2024 年 3 月 6 日

androidx.navigation:navigation-*:2.8.0-alpha04 がリリースされました。バージョン 2.8.0-alpha04 に含まれる commit については、こちらをご覧ください。

新機能

  • composable 関数や navigation 関数の初期化の一環として定義することで、Navigation Compose の遷移の SizeTranform を指定できるようになりました。(I91062b/296912651)。

バグの修正

  • ジェスチャーなしでシステムの「戻る」を使用した場合に、Compose Navigation の NavHost で遷移が適切に表示されない問題を修正しました。(Iceeaeb/325998468)。

バージョン 2.8.0-alpha03

2024 年 2 月 21 日

androidx.navigation:navigation-*:2.8.0-alpha03 がリリースされました。バージョン 2.8.0-alpha03 に含まれる commit については、こちらをご覧ください

API の変更

  • いずれにせよメインスレッドに必要なコードを使用しているため、NavBackStackEntry.savedStateHandle@MainThread としてマークされるようになりました。(Ibb988b/299523245)。

バグの修正

  • 関連付けられたエントリの ViewModel が保存済み状態の一部でなかったために、NavGraph ViewModel が DESTROYED になるのが早すぎる Navigation の問題を修正しました。(Ib6bb7b/317581849)。

依存関係の更新

バージョン 2.8.0-alpha02

2024 年 2 月 7 日

androidx.navigation:navigation-*:2.8.0-alpha02 がリリースされました。バージョン 2.8.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • Navigation Compose で、Compose アニメーションから新しい SeekableTransitionState API を介して予測型アプリ内「戻る」をサポートできるようになりました。これにより、「戻る」ジェスチャーを使用して、カスタム移行で前のデスティネーションを確認した後、完了した操作でトランザクションを commit するかキャンセルするかを決定できます。(I8b8e9)。

バージョン 2.8.0-alpha01

2024 年 1 月 24 日

androidx.navigation:navigation-*:2.8.0-alpha01 がリリースされました。バージョン 2.8.0-alpha01 に含まれるコミットについては、こちらをご覧ください

バグの修正

  • デスティネーションに対して複数の saveState 呼び出しを行うと複数の状態が保存されるものの、復元できるのは最初の状態のみという BackStackState リークを修正しました。(I598b0b/309559751)。
  • NavigationUI ヘルパーを使用してアプリバーのタイトルを入力すると、文字列以外の引数が正しく表示されない問題を修正しました。(#636b/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 については、こちらをご覧ください

バグの修正

  • Navigation 2.8.0-alpha01 からのバックポート: BackStackState のリークを修正しました。1 つの NavBackStackEntry に対して複数の saveState() 呼び出しを行うと複数の状態が保存されるものの、最初に保存された状態のみ復元できました。(I598b0b/309559751)。
  • Navigation 2.8.0-alpha01 からのバックポート: NavigationUI ヘルパーを使用してアプリバーのタイトルを入力すると、文字列以外の引数が正しく表示されない問題を修正しました。(#636b/316676794)。

外部からの協力

  • NavigationUI ヘルパーを使用してアプリバーのタイトルを入力する際の文字列以外の引数の表示の問題を修正し、SimonMarquis に感謝します。

バージョン 2.7.6

バージョン 2.7.6

2023 年 12 月 13 日

androidx.navigation:navigation-*:2.7.6 がリリースされました。バージョン 2.7.6 に含まれる commit については、こちらをご覧ください

バグの修正

  • NavGraph equals() 関数は、呼び出し元のグラフだけでなく、他のグラフのノードを正しく考慮するようになりました。これにより、ID が異なるノードを持つグラフが等しいと見なされなくなります。(I401cbb/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 番目のパスで更新された状態を読み取るのを待つ必要がなくなり、最初の合成パスで開始デスティネーションをレンダリングするようになりました。(I439a7b/304852206)。

バグの修正

  • 2 つのデスティネーションをリンクするアクションを含むデスティネーションがグラフ内にあった場合にのみ、まったく同じグラフで setGraph を複数回呼び出すと、バックスタックがポップされる問題を修正しました。(Ieaed7)。
  • 連続して移動されたダイアログと閉じられたダイアログが、NavController.visibleEntries のリストに漏洩しなくなりました。(I67586b/287969970)。
  • エントリがポップされた後に構成が変更されたとき、saveState が false であれば、エントリの ViewModel が適切にクリアされるようになりました。(Idf242b/298164648)。
  • 構成の変更前にバックスタックが完全に空の場合や、受信インテントに FLAG_ACTIVITY_NEW_TASK フラグが設定されている場合にのみ setGraph を呼び出す場合、NavController が同じディープリンクを複数回処理できる問題を修正しました。(I73c7f)。

依存関係の更新

  • Fragment を使用したナビゲーションが 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 については、こちらをご覧ください

新機能

  • popBackStack のサポートに一致する、引数付きのルートを使用して、これらの正確な引数を使用する特定のエントリにポップバックできるようにする popUpTo のサポートを追加しました。(I731f4b/299255572)。

バグの修正

  • popUpTo で別のナビゲーションでナビを中断すると FragmentNavigator がクラッシュする問題を修正しました。(I3c848b/301887045)。
  • システムの戻るボタンを押すと、表示されている Fragment と一致するように currentDestination が正しく更新されない問題を修正しました。(Id0d6cb/289877514)。
  • 上のダイアログを閉じると、DialogFragment のライフサイクルが正しく RESUMED 状態に移行するようになりました。(I88f0db/301811387)。

バージョン 2.7.3

バージョン 2.7.3

2023 年 9 月 20 日

androidx.navigation:navigation-*:2.7.3 がリリースされました。バージョン 2.7.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • visibleEntries リストに誤ったエントリが含まれる原因となっていた、Fragment を使用した Navigation の問題を修正しました。(I5caa9b/288520638)。
  • フローティング ウィンドウのデスティネーション(DialogsBottomsheets など)が RESUMED ライフサイクル コールバックを受け取らない問題を修正しました。(I3b866b/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/298059596b/289436035)。
  • Navigation Compose で複数のダイアログを同時に表示する際、部分的に覆い隠されたダイアログ(一番上のダイアログではないなど)が STARTED 状態ではなく CREATED ライフサイクル状態になる問題を修正しました。(aosp/2728520b/289257213)。
  • Navigation Compose で複数のダイアログを同時に表示する際、最上位のダイアログを閉じると、新しい最上位のダイアログが RESUMED に正しく移動せず、STARTED ライフサイクル状態で停止する問題を修正しました。(aosp/2629401b/286371387)。
  • Navigation Safe Args が実際に実行されていない場合に、タスクを積極的にインスタンス化しなくなりました。(I0e385b/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 については、こちらをご覧ください

バグの修正

  • Scaffold の使用時に Lifecycle.State.DESTROYED ViewModel にアクセスしようとするとエラーが発生する可能性がある Compose での Navigation の問題を修正しました。(I1dc11b/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 Compose 自体に戻す方法のガイダンスとともに、まもなく正式にサポートを終了します。ただし、すでに最新の Accompanist アルファ版(0.31.2-alpha)を使用している場合は、移行ガイドの逆であり、その他の API の変更は必要ありません。(b/197140101)。

バグの修正

  • Navigation Compose の NavHost が、アクティビティが停止して再開された後もシステムの「戻る」呼び出しを正しくインターセプトするようになりました。(Icb6deb/279118447)。

依存関係の更新

  • Navigation が 1.1.0 以降の Compose 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 オーダーが追加されました(/Ib1c3ab/285153947)。

バージョン 2.7.0-beta01

2023 年 6 月 7 日

androidx.navigation:navigation-*:2.7.0-beta01 がリリースされました。バージョン 2.7.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Navigation Compose の NavHost が、ActivitySTOPPED および RESUMED になった後でも、システムの「戻る」呼び出しを正しくインターセプトするようになりました。(Icb6deb/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 Compose 自体に戻す方法のガイダンスとともに、まもなく正式にサポートを終了します。ただし、すでに最新の Accompanist アルファ版(0.31.2-alpha)を使用している場合は、移行ガイドの逆であり、その他の API の変更は必要ありません。(b/197140101)。

バグの修正

  • Navigation 2.6.0-rc02 以降: Fragment での Navigation に関する問題を修正しました。popUpTo を使用して移動し、ビューを再作成せずにバックスタックからフラグメントをポップすると、システムが再び動作しなくなる問題を修正しました。(Ieb8d4b/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 の重要な変更

  • NavBackStackEntryarguments と、OnDestinationChangedListener に渡される arguments は、デスティネーションに移動したときに作成された不変の引数のコピーのみになりました。つまり、これらのバンドルに加えた変更は、arguments や他の OnDestinationChangedListener インスタンスへの後続のアクセスには反映されません。
  • NavDeepLink が配列のデフォルト値をサポートするようになりました。これによりクエリ パラメータの繰り返しがサポートされ、引数の配列型にマッピングされます。NavType にデフォルト メソッドも追加されました。デフォルト メソッドをオーバーライドして、2 つの解析された値を結合できます。
  • NavType のカスタム サブクラスで、serializeAsValue をオーバーライドして String に値をシリアル化できるようになりました。これにより、シリアル化とシリアル化解除(parseValue 経由)の両方を NavType クラスで完全にカプセル化できます。StringType がこのメソッドをオーバーライドし、指定された StringUri.encode を呼び出すようになりました。

2.5.0 以降の Navigation Compose に関する重要な変更

  • NavHost を使用してコンポーザブルをプレビューしたときに、デフォルトで NavGraph の startDestination が表示されるようになりました。
  • NavController.popBackStack(route)NavController.getBackStackEntry(route)NavController.clearBackStack(route) がすべて、引数が部分的または完全に入力されたルートをサポートするようになりました。引数は、エントリの引数と完全に一致している必要があります。
  • navDeepLink Kotlin DSL を使用して空の NavDeepLink を作成しようとすると、ディープリンクが有効である URI、アクション、または mimetype が必要であることを示す lint 警告が表示されるようになりました。

フラグメントを使用した Navigation の 2.5.0 以降の重要な変更

  • NavHostFragment がシステムの [戻る] ボタン自体をインターセプトしなくなりました。これにより、基盤となる FragmentManager がシステムを再度処理できるようになります。これにより、Fragment 1.7.0-alpha01 以降では、Android U デバイスでアプリ内予測型「戻る」アニメーションを提供できるようになります。
  • Fragment で Navigation を使用する場合、フラグメントを FragmentManager のバックスタックに追加する FragmentTransaction を手動で実行しようとすると、IllegalArgumentException がスローされるようになりました。必ず navigate() API を使用してフラグメントを追加してください。
  • ナビゲーション XML ファイルのアクティビティ要素の app:data 属性と app:dataPattern 属性で、正確な文字列 ${applicationId} をプレースホルダとして使用すると、インフレート時にコンテキストの packageName がプレースホルダに自動的に入力されます。
  • FragmentNavigatorNavBackStackEntries の移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntry Lifecycle は、フラグメントの特殊効果の開始と終了が完了するのを待ってから、最終的な Lifecycle.State を移動するようになりました。
  • DialogFragmentNavigatorNavBackStackEntries の移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntry Lifecycle は、DialogFragment LifecycleDESTROYED に移行するのを待ってから、DESTROYED 自体に移行します。
  • NavHostFragment を使用すると、onCreate() の後だけでなく、NavHostFragmentFragmentManager にアタッチされた直後に 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 関数を介して、独自のコードでも使用できます。
  • トップ アプリバーと連携するための NavigationUIsetupWithNavController 統合により、自動生成されたリソース整数を出力する代わりに、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 で移動し、ビューを再作成せずにバックスタックからフラグメントをポップすると、システムが再び動作しなくなるという、Fragment での Navigation の問題を修正しました。(Ieb8d4b/281726455)。

バージョン 2.6.0-rc01

2023 年 5 月 10 日

androidx.navigation:navigation-*:2.6.0-rc01 がリリースされました。バージョン 2.6.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • onResume() ライフサイクル コールバックで popUpTo を使用したナビゲーションを介してフラグメントを削除すると、IllegalStateException が発生する、フラグメントを使用した Navigation の問題を修正しました。(I21884b/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 がある場合、バックスタック上に結果のトップエントリが一貫して RESUMED Lifecycle.State に戻るようになりました。(Id8067b/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 と同じ名前の引数のプレースホルダを含めるように、無効なルートのチェックを修正しました。(Ic62bfb/274697949)。
  • Action/MimeType が一致する NavDestination によって要求される null 値非許容の NavArgument がナビゲーション オペレーションに含まれていない場合、Action/MimeType に基づくディープリンク ナビゲーションは失敗するようになりました。(Ibfa17b/271777424)。
  • NavController が以前のグラフと同じルートとデスティネーションを持つグラフを設定する際、現在のグラフノードとバックスタック デスティネーションを新しいインスタンスに適切に置き換えるようになりました。これにより、Navigation Compose で状態を保存せずに onLaunchSingleTop を使用した場合のクラッシュが修正されました。これにより、ルートグラフに関連付けられたデスティネーションに移動すると、正しくないバックスタックがビルドされるエラーも修正されます。(I5bc58b/275258161b/275407804)。

バージョン 2.6.0-alpha08

2023 年 3 月 22 日

androidx.navigation:navigation-*:2.6.0-alpha08 がリリースされました。バージョン 2.6.0-alpha08 に含まれる commit については、こちらをご覧ください

新機能

  • NavHostFragment を使用すると、onCreate() の後だけでなく、NavHostFragmentFragmentManager にアタッチされた直後に NavController を取得できるようになりました。(Ic6382b/220186282)。

バグの修正

  • null 値非許容の引数を含むネストされたグラフをポップする際の NullPointerException を修正しました。(6b3581b/249988437)。
  • popUpTo で移動を行った後にシステムの「戻る」を使用すると、NavController の状態が正しいエントリにポップされます。(I3a8ecb/270447657)。
  • システムの「戻る」または popBackStack() を介してバックスタックがポップされた場合、およびトランザクションがフラグメントにエフェクトを使用するかどうかに関係なく、FragmentNavigator はエントリを適切にポップするようになりました。(I81bdf)。
  • FragmentNavigator にフラグメントを追加する ナビゲーションを使用しない FragmentManager でクラッシュが発生しなくなりました。(b17204b/274167493)。

依存関係の更新

バージョン 2.6.0-alpha07

2023 年 3 月 8 日

androidx.navigation:navigation-*:2.6.0-alpha07 がリリースされました。バージョン 2.6.0-alpha07 に含まれる commit については、こちらをご覧ください

バグの修正

  • ルートを受け取る getBackStackEntrypopBackStackclearBackStack API バリアントが、null 値許容の引数と null 値許容のクエリ パラメータを持つルートパターンを受け取るようになりました(I22294b/269302500)。
  • NavController から clearBackStack() を呼び出しても、クリアされたバックスタックに関連付けられたフラグメント マネージャー内の保存済み状態がクリアされない問題を修正しました。(Ic1cceb/271190202)。
  • 2.6.0-alpha06 で、システムを使用してタブ間で戻ると、BottomNavigationView の誤った MenuItem がハイライト表示される回帰を修正しました。(I634f6b/270447657)。
  • Animation の使用時に NavBackStackEntry が RESUMED 状態に移行されない原因となっていた 2.6.0-alpha06 の回帰を修正しました。(Ib3589b/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 の変更

  • NavController navigate のオーバーロードは、必ずメインスレッドで呼び出されるように、すべて @MainThread アノテーションが付けられるようになりました。(I2c0b0b/263427111

バグの修正

  • Dynamic Fragment Navigation の使用中に移動しようとしたときに発生するクラッシュを修正しました。(I3ee29b/268360479
  • システムの [戻る] ボタンで別のフラグメントに移動する場合について、下部のバーが選択した項目に正しく更新されないバグを修正しました。(If559fb/269044426

既知の問題

  • Fragment で Navigation を使用すると、Animation API を使用すると NavBackStackEntry の Lifecycle が RESUMED に到達できない。(b/269646882)。
  • Fragment で Navigation を使用し、BottomNavigation でナビゲーションを使用している場合、複数のエントリを持つバックスタックを復元しようとすると、BottomMenuItem が正しく更新されません。(b/270447657)。
  • Fragment で Navigation を使用する場合、状態を復元した後、フラグメントが DESTROYED のときに NavBackStackEntry LifecycleDESTROYED を取得しない。(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) がすべて、引数が部分的または完全に入力されたルートをサポートするようになりました。引数は、エントリの引数と完全に一致している必要があります。(Iebd28Ic678cI3b37bb/257514373
  • FragmentNavigatorNavBackStackEntries の移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntry Lifecycle は、フラグメントの特別なエフェクトの入力と終了が完了するまで待ってから最終的な Lifecycle.State に移行するようになりました。(I3cb19b/238686802
  • DialogFragmentNavigatorNavBackStackEntries の移動やポッピングの際に遷移 API を使用するようになりました。つまり、NavBackStackEntry Lifecycle は、DialogFragment LifecycleDESTROYED に移行するまで待ってから、DESTROYED に移行するようになりました。(I53ee5b/261213893

API の変更

  • NavigatorState が、NavigatorNavBackStackEntries を中間の Lifecycle.State に移行することを認める prepareForTransition API を提供するようになりました。(I42c21b/238686802
  • backstack プロパティを介して NavGraphNavigator または ComposeNavigator と関連付けられているバックスタックにアクセスできるようになりました。移動または popBackStack オペレーションを実行した NavBackStackEntry を完了としてマークするために、ComposeNavigatoronTransitionComplete() コールバックも公開するようになりました。(I02062I718dbb/257519195

バグの修正

  • push/popWithTransition API を使用していて、エントリがすでに処理されている場合、Navigator のステータスが no-op になるようにしました。(Iadbfab/261213893
  • NavGraph をネストして launchSingleTop を使用する場合、元のデスティネーションからその startDestination までのすべてのデスティネーションのみが、バックスタックの一番上に適切に追加されるようになりました。(Id4beab/253256629
  • 同じデスティネーションに移動し、launchSingleTop フラグを true に設定した際に、Navigation によって DialogFragment インスタンスが適切に置き換えられるようになりました。(I45b5ab/149572817
  • 長さが 19 文字ちょうどの引数を使用した場合に、Navigation SafeArgs でコンパイル エラーが発生しなくなりました。(Id60bcb/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 がこのメソッドをオーバーライドして、指定の StringUri.encode を呼び出すようになりました。(Ie5213b/247637434
  • NavigationUI が、選択した MenuItem 経由で移動できなかった場合にログを提供するようになりました。(I2af5ab/247730357

バグの修正

  • Navigation のディープリンクが、グラフの初期化時ではなく遅延的に解析されるようになりました。これにより、アプリの起動時のパフォーマンスを改善できることがあります。(Iab0ab
  • null のデフォルト引数を使用して特定のデスティネーションにディープリンクした場合について、上に移動するとクラッシュする問題を修正しました。(I51c24b/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 の作成のためのデスティネーションがない場合、NavHostNoSuchElementException が発生しなくなりました。単にコンポジションをスキップするようになりました。(Ieb46eb/253299416
  • Navigation 2.5.3 以降: 保存された Compose の状態(rememberSaveable の使用状況など)が破棄されず、デスティネーションがバックスタックからポップされたときに削除される問題を修正しました。(I64949

依存関係の更新

バージョン 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 関数を介して独自のコードでも利用できます。(Ie936eb/238496771

バグの修正

  • navigation:navigation-fragment コンポーネントが、Fragment バージョン 1.5.2 に依存するようになりました。(I00ba4
  • ダイアログなどの FloatingWindow デスティネーションに移動したときに、選択したメニュー項目が更新されなくなります。(I4cde8b/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 値を解析して文字列値に格納するようにしました(I5f803b/167959935)。
  • NavDeepLink が配列のデフォルト値をサポートするようになりました。これによりクエリ パラメータの繰り返しがサポートされ、引数の配列型にマッピングされます。NavType にもデフォルト メソッドが追加されました。デフォルト メソッドはオーバーライドして、2 つの解析値を結合できます(Id68c3b/209977108)。
  • ナビゲーション XML ファイルのアクティビティ要素における app:data 属性と app:dataPattern 属性で、プレースホルダとして正確な文字列 ${applicationId} を使用すると、インフレーション時にコンテキストの packageName がプレースホルダに自動設定されます(Iaabdeb/234223561)。
  • navDeepLink Kotlin DSL を使用して空の NavDeepLink を作成しようとすると、ディープリンクには有効な URI、アクション、MIME タイプが必要であることを示す lint 警告が表示されます(I08d2fb/154038883)。

API の変更

  • 新たに NavDestination 拡張関数を追加しました。この関数では、android:label="{arg}" という形式の引数を使用して動的ラベルを解析し、文字列に格納します。R.string 値を解析して文字列値に格納することで、ReferenceType 引数をサポートします(I07d89b/236269380)。

動作の変更

  • NavBackStackEntry の arguments と、OnDestinationChangedListener に渡される arguments は、デスティネーションに移動したときに作成された不変の引数のコピーのみになりました。したがって、これらのバンドルに対する変更は、arguments または他の OnDestinationChangedListener インスタンスへの後続のアクセスには反映されません(I676f5)。

バグの修正

  • Navigation 2.5.2 以降: Dynamic Navigation は、他のモジュールに移動する前に、他のモジュールからアクティビティのデスティネーションを正しくインストールするようになりました(Ia2c16b/240292838)。
  • Navigation 2.5.2 以降: 同じデスティネーションに移動し、launchSingleTop フラグを true に設定した際に、Fragment インスタンスを適切に置き換えるようになりました(I5a2f1b/237374580)。
  • Navigation 2.5.2 以降: 新たにポップされた開始デスティネーションと親グラフを共有する、二重にネストされたグラフに移動する際に IllegalStateException が発生しないように修正しました(I9f7cbb/243778589)。

バージョン 2.5

バージョン 2.5.3

2022 年 10 月 24 日

androidx.navigation:navigation-*:2.5.3 がリリースされました。バージョン 2.5.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • Crossfade の作成のためのデスティネーションがない場合、NavHostNoSuchElementException が発生しなくなりました。単にコンポジションをスキップするようになりました。(Ieb46eb/253299416
  • 保存された Compose の状態(rememberSaveable の使用状況など)が破棄されず、デスティネーションがバックスタックからポップされたときに削除される問題を修正しました。(I64949

バージョン 2.5.2

2022 年 9 月 7 日

androidx.navigation:navigation-*:2.5.2 がリリースされました。バージョン 2.5.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • Dynamic Navigation は、他のモジュールに移動する前に、他のモジュールからアクティビティのデスティネーションを正しくインストールするようになりました(Ia2c16b/240292838)。
  • 同じデスティネーションに移動し、launchSingleTop フラグを true に設定した際に、Fragment インスタンスを適切に置き換えるようになりました(I5a2f1b/237374580)。
  • 新たにポップされた開始デスティネーションと親グラフを共有する、二重にネストされたグラフに移動する際に IllegalStateException が発生しないように修正しました(I9f7cbb/243778589)。

依存関係の更新

バージョン 2.5.1

2022 年 7 月 27 日

androidx.navigation:navigation-*:2.5.1 がリリースされました。バージョン 2.5.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • Bundle に保存されているカスタム引数の型を使用する場合、生成されるクラスでの非推奨警告が Navigation Safe Args で発生しなくなりました。(Id86edb/237725966

依存関係の更新

バージョン 2.5.0

2022 年 6 月 29 日

androidx.navigation:navigation-*:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

2.4.0 以降の重要な変更

  • CreationExtras の統合 - NavigationLifecycle 2.5.0CreationExtras を介して、ステートレスの ViewModelProvider.Factory を提供できるようになりました。

Navigation SafeArgs

  • Navigation Safe ArgsAndroid Gradle Plugin の依存関係をアップグレードして、7.0.4 に依存するようになりました。これにより、7.0 より前の AGP バージョンの互換性が失われます。
  • applicationId の代わりに使用できる namespace build.gradle 属性のサポートを追加しました。

その他の変更点

  • visibleEntries API は試験運用版ではなくなり、NavController に従ってデスティネーションが現在表示されているすべてのエントリを取得する関数が提供されます。

バージョン 2.5.0-rc02

2022 年 6 月 15 日

androidx.navigation:navigation-*:2.5.0-rc02 がリリースされました。バージョン 2.5.0-rc02 に含まれる commit については、こちらをご覧ください

バグの修正

  • Navigation Compose NavHost の使用時に下部のデスティネーションをすばやく切り替えることで起きていたクラッシュを修正しました。(I3979ab/234054916
  • applicationId が含まれていない applicationIdSuffix と名前空間を使用している場合、または applicationId と名前空間が異なる場合に、Navigation SafeArgs がクラッシュすることがなくなりました。(I754b1b/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 ルールを追加しました。(Ic15a5b/178403185

バグの修正

  • NavHostDialogHost のコンポーザブルのスコープは、想定される順序で破棄されるようになりました。具体的には、内部コンポーザブルが外部コンポーザブルより前に破棄されます。(I157e6
  • Navigation SafeArgs が ArgumentsGenerationTaskPathSensitivity.RELATIVE を使用するようになり、キャッシュの再配置が可能になりました。そのため、キャッシュ エントリを CI ビルドからローカルビルドに再利用できます。(I5f67cb/173420454
  • UnrememberedGetBackStackEntryDetector lint ルールが更新され、getBackStackEntry() の呼び出しを囲む remember 呼び出しもキーとして NavBackStackEntry オブジェクトを渡すようになりました。(Ib7081b/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 が発生していました。(Id7376b/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 は試験運用版ではなくなりました。(I4829fb/225394514

バグの修正

  • NavHost が、コンポーズするエントリを決定する際に、NavControllervisibleEntries に依存するようになりました。つまり、ネストされた NavHost を使用すると、内部 NavHost が適切にアニメーション化されるようになりました。(I4ba2bb/225394514
  • NavController によって提供される visibleEntries StateFlow が、現在の Lifecycle 状態ではなく、エントリの最大 Lifecycle 状態に基づくようになりました。つまり、navController のホスト ライフサイクルが STARTED に達しなくても、表示されるエントリのリストは同じままです。(I9e2a8b/225394514
  • SavedStateViewFactory が、SavedStateRegistryOwner で初期化された場合でも CreationExtras を使用できるようになりました。エクストラが指定されている場合、初期化された引数は無視されます。(I6c43bb/224844583
  • NavDeepLink が、値のない単一のクエリ パラメータを含む URI を解析できるようになりました。(I0efe8b/148905489
  • ディープリンクで、空の文字列が有効な引数と見なされるようになりました。(I70a0db/217399862
  • 名前空間の使用時に AndroidManifest.xml が存在しない場合に、Navigation Safe Args がクラッシュすることがなくなりました。(I17ccfb/227229815

バージョン 2.5.0-alpha03

2022 年 2 月 23 日

androidx.navigation:navigation-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください

API の変更

  • CreationExtrasby navGraphViewModels に渡して ViewModel を作成できるようになりました。(I29217b/217618359

バグの修正

  • ルート / ディープリンク URI に埋め込まれたエンコード済みの改行文字が、NavDeepLinks で適切にサポートされるようになりました。(I513d1b/217815060
  • CreationExtras が、NavBackStackEntries とともに使用して ViewModel を作成するときに正しく機能するようになりました。(I69161b/217617710
  • Navigation Safe Args が、AndroidManifest でパッケージの代わりに build.gradle で定義された名前空間を使用できるようになりました。(I659efb/217414933

バージョン 2.5.0-alpha02

2022 年 2 月 9 日

androidx.navigation:navigation-*:2.5.0-alpha02 がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください

バグの修正

  • Navigation 2.4.1 以降: ネストされたグラフでビュー バインディングを使用している場合に、NavHostFragmentOnBackPressedDispatcher が適切に設定されるようになりました。(Ifbb51b/214577959
  • Navigation 2.4.1 以降: ネストされた複数の NavGraph を介してディープリンクする際に、バックスタックに中間の開始デスティネーションが適切に含まれるようになりました。(I504c0b/214383060

バージョン 2.5.0-alpha01

2022 年 1 月 26 日

androidx.navigation:navigation-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

バグの修正

  • by navGraphViewModels() を介して作成された ViewModel に Fragment の onCreate() からアクセスすると IllegalStateException で失敗する問題を修正しました。(I8a14d
  • NavDeepLink が引数を不必要に 2 回デコードしなくなりました。つまり、適切な引数が最終デスティネーションに渡されるようになりました。(I31b0ab/210711399

Safe Args

  • Safe Args は Android Gradle プラグイン バージョン 7.0.4 に依存するようになりました。つまり、Navigation Safe Args は 7.0 より前のバージョンの Android Studio とは互換性がなくなりますが、Android Gradle プラグイン 7.1.0 以上と互換性を持つようになります。(I41c88b/213086135b/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 で適切にサポートされるようになりました。(I513d1b/217815060
  • Navigation 2.5.0-alpha03 からバックポート: Navigation SafeArgs が、AndroidManifest でパッケージの代わりに build.gradle で定義された名前空間を使用できるようになりました。(I659efb/217414933
  • Navigation 2.5.0-alpha04 からバックポート: 名前空間の使用時に AndroidManifest.xml が存在しない場合に、Navigation Safe Args がクラッシュすることがなくなりました。(I17ccfb/227229815
  • Navigation 2.5.0-alpha04 からバックポート: ディープリンクで、空の文字列が有効な引数と見なされるようになりました。(I70a0db/217399862

バージョン 2.4.1

バージョン 2.4.1

2022 年 2 月 9 日

androidx.navigation:navigation-*:2.4.1 がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • ネストされたグラフでビュー バインディングを使用している場合に、NavHostFragmentOnBackPressedDispatcher が適切に設定されるようになりました。(Ifbb51b/214577959
  • ネストされた複数の NavGraph を介してディープリンクする場合に、バックスタックに中間の開始デスティネーションが適切に含まれるようになりました。(I504c0b/214383060
  • Navigation 2.5.0-alpha01 からバックポート: Fragment の onCreate() から by navGraphViewModels() を介して作成された ViewModel にアクセスすると、IllegalStateException で失敗する問題を修正しました。(I8a14d
  • Navigation 2.5.0-alpha01 からバックポート: NavDeepLink が引数を不必要に 2 回デコードしなくなりました。つまり、適切にデコードされた引数が最終デスティネーションに渡されるようになりました。(I31b0ab/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 以上と互換性を持つようになります。(I41c88b/213086135b/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 を実装として使用します)を管理します。
  • NavControllercurrentBackStackEntryAsFlow() メソッドは、現在の 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 メソッドが更新され、代わりに Material 1.4.0NavigationBarView で導入されたスーパークラスを受け取るようになりました。これにより NavigationRailView とともに使用できるようになります。

  • XML から <action> 要素をインフレートする場合に、アニメーション属性で、app:enterAnim="?attr/transitionEnter" 構文を使用してテーマから取得した属性を使用できるようになりました。

  • Safe Args が NavArgs クラスごとに fromSavedStateHandle() メソッドを生成するようになりました。(#122b/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 の「パス」部分のように扱われます(例: homeprofile/{userId}profile/{userId}/friends など)。デスティネーションの ID が特定のコンテンツ部分に関連付けられている場合は、暗黙的ディープリンクと同じルールに則ってその動的引数をルートに含める必要があります。

ID のみを受け取っていたすべての NavController API に、ルート String を受け取るオーバーロードが追加されました。これには、navigate()popBackStack()popUpTo()getBackStackEntry() が含まれます。

これにより、一部の API が次のように影響を受けます。

  • Kotlin DSL の popUpTo Kotlin プロパティは非推奨になりました。popUpToId の使用をおすすめします。
  • getStartDestination() API は非推奨になりました。getStartDestinationId() の使用をおすすめします。

ID によるナビゲーションとは異なり、ルートによるナビゲーションは暗黙的ディープリンクと同じルールに従います。つまり、ネストされたグラフ内の任意のデスティネーションに直接移動でき、そのルートは、デスティネーションに対する外部から表示可能なディープリンクを明示的に追加することなく、マルチモジュール プロジェクトで確実に利用できます。

Navigation Compose

navigation-compose アーティファクトは、Navigation コンポーネントJetpack Compose との統合を提供します。アプリ内のデスティネーションとして @Composable 関数を使用します。

今回のリリースでの変更点は以下のとおりです。

  • composabledialog のデスティネーションを使用して Kotlin DSL でナビゲーション グラフを作成できる NavHost コンポーザブル、および Accompanist Navigation Material の Navigator など、オプションの Navigator のサポートが追加されました。
  • デスティネーション間のクロスフェードが強制的にサポートされます。Accompanist Navigation Animation を使用すると、試験運用版の Compose API を使用して開始遷移と終了遷移を制御できます。
  • 各コンポーザブル デスティネーションに対する Lifecycle のスコープ設定。各デスティネーションは、いずれかの開始遷移が終了したときにのみ RESUMED 状態に到達し、いずれかの既存遷移が開始されるとすぐに STARTED 状態になります。したがって、LifecycleRESUMED のときに navigate 呼び出しをトリガーするだけで、IllegalStateException とマルチタッチの問題をすべて回避できます。
  • デスティネーション レベルでの ViewModel のスコープ設定(Lifecycle ViewModel Compose 2.4.0viewModel() API または Hilt Navigation Compose 1.0.0hiltViewModel() を介した)により、構成変更で破棄されず、別の理由で破棄された場合にはバックスタックに保持されるスコープが提供されます。また、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:popUpToSaveStateapp: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” />
    
  • navOptions Kotlin 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.BuilderNavOptions オブジェクトを手動で作成する場合は、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() から返された PendingIntentPendingIntent.FLAG_IMMUTABLE が追加され、Android 12 をターゲットとしたときにこの API が期待どおりに機能するようになりました。
  • Navigation は Lifecycle 2.3.1 に依存するようになり、setGraph()popBackStack()navigateUp()navigate()NavBackStackEntry Lifecycle を更新するメソッド)を @MainThread とマークすることで、Lifecycle 2.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 の解析された引数で、疑問符と同じようにポンド記号も引数の区切り文字と見なされるようになりました。(I21309b/180042703

バグの修正

  • ディープリンクで、プレースホルダの名前と同じ値を持つ引数が無視されなくなりました。(If8017b/207389470
  • NavController の復元後に遷移を使用してネスト デスティネーションをポップしても、NavController がクラッシュしなくなりました。(I0f7c9b/205021623
  • 無効な startDestination を使用しているときのエラー メッセージで、開始デスティネーションのルートが利用可能な場合、デフォルトでそのルートが指定されるようになりました。(I86b9db/208041894

Navigation Compose のバグの修正

  • ボトム ナビゲーション メニュー項目を使用して、開始デスティネーションと別のデスティネーションをすばやく切り替えるとクラッシュが発生する問題を修正しました。(Ic8976b/208887901
  • 構成の変更やプロセスの終了後、ダイアログ デスティネーションが画面上部に適切に復元されるようになりました。(I4c0dcb/207386169
  • ダイアログの NavBackStackEntry から ViewModel を取得しようとしているときにダイアログを閉じると失敗する問題を修正しました。(I6b96db/206465487
  • Navigation Compose の NavHostactivity のデスティネーションを使用する際、再コンポーズが無限に繰り返される問題を修正しました。(I8f64c
  • 構成の変更やプロセスの終了後に古いアクティビティの参照を保持していた、Navigation Compose のリークを修正しました。(I4efcbb/204905432

Safe Args のバグの修正

  • プロセスの終了後にカスタムの Parcelable 配列を復元しようとしても、SafeArgs がクラッシュすることがなくなりました。(I618e8b/207315994
  • ブール値の配列で null 値が許可されない Safe Args のバグを修正しました。(I8c396b/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 で遅延コンパイルされるようになりました。これにより、ディープリンクを含むナビゲーション グラフのインフレート時間が短縮されます。(b8d257b/184149935

バグの修正

  • NavHost がアクティビティの setContent() に直接追加されると、Lifecycle.State.STARTED に移動した後、NavBackStackEntry が Lifecycle.State.CREATED に push される問題を修正しました。(Ia5ac1b/203536683
  • ダイアログが実際に表示される前にバックスタックから DialogFragment デスティネーションをポップすると、ダイアログが実際には閉じられず、エラーが発生したダイアログがユーザーによって手動で閉じられた場合にクラッシュする競合状態を修正しました。(I687e5
  • NavigationUIonNavDestinationSelected API が、実際にはナビゲーション グラフに 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 の変更

  • visibleEntries API が試験運用版になりました。(I93f6f

バグの修正

  • 同じ画面間を移動することで遷移が中断されても、ViewModel が破棄されなくなりました(Id52d8b/200817333
  • NavDestination にディープリンクを追加するときに、null 許容の NavDeepLink 引数にデフォルト値が不要になりました。(I5aad4b/201320030
  • ライフサイクルが異なる NavBackStackEntry が等しいとみなされなくなりました。つまり、NavHost は、singleTop でナビゲーションを行う場合や、下部のメニュー項目を再選択する場合に、すべてのデスティネーションを適切に再コンポーズします。(I1b351b/196997433
  • onCreateListPaneView() によって返されるリストペインの layout_width 属性と layout_weight 属性が正しく処理されない、または無視される AbstractListDetailFragment の問題を修正しました。(f5fbf3
  • ダイアログ デスティネーションの表示状態が正しく DialogFragmentNavigator の状態と同期されるようになりました。つまり、DialogFragment の非同期の dismiss() API を手動で呼び出すと、拒否されたダイアログの上にあるすべてのダイアログ デスティネーションが適切にクリアされるようになりました。これは、popUpTo または popBackStack() を使用してダイアログを閉じるケースには影響しません。(I77ba2
  • AbstractAppBarOnDestinationChangedListeneronDestinationChanged() のエラー メッセージがより明確になりました。(Ie742d

バージョン 2.4.0-alpha10

2021 年 9 月 29 日

androidx.navigation:navigation-*:2.4.0-alpha10 がリリースされました。バージョン 2.4.0-alpha10 に含まれる commit については、こちらをご覧ください

新機能

  • NavController で、visibleEntries StateFlow を介してすべての表示可能な NavBackStackEntry インスタンスのリストを取得できるようになりました(Ia964e
  • rememberNavController() がオプションの Navigator インスタンスのセットを受け取るようになりました。これらのインスタンスは、返される NavController に追加され、Accompanist Navigation Material の Navigator など、オプションの Navigator のサポートを強化します。(I4619e

バグの修正

  • Activity の再作成時に Dynamic Navigation がクラッシュしなくなりました。(Ifa6a3b/197942869
  • NavHost を含むコンポーザブルのデスティネーションにポップバックした後にのみ発生する、システムの [戻る] ボタンに関する問題を修正しました。(3ed148b/195668143
  • SafeArgs は、fromBundle()fromSavedStateHandle() の引数を適切なパラメータ順序で生成するようになりました。(I824a8b/200059831

バージョン 2.4.0-alpha09

2021 年 9 月 15 日

androidx.navigation:navigation-*:2.4.0-alpha09 がリリースされました。バージョン 2.4.0-alpha09 に含まれる commit については、こちらをご覧ください。

新機能

  • clearBackStack() メソッドを使用して、popBackStack() または popUpToSaveState で保存された状態をクリアできるようになりました。(I80a0f
  • ネストされたナビゲーション グラフのビルダーに引数やディープリンクのリストを渡せるようになりました。結果のグラフに自動的に追加されます。(I8a470b/182545357

API の変更

  • navArgument Kotlin DSL 関数が、navigation-compose ではなく navigation-common の一部になりました。この関数を引き続き使用するには、インポートを更新する必要があります。(I1d095

動作の変更

  • Safe Args は引数を生成する際、デフォルト値のないパラメータを、デフォルト値のある引数のパラメータの前に置くようになりました。(I89709b/198493585

バグの修正

  • Navigation Compose を使用する場合、NavGraphs はすべての子が DESTROYED の場合にのみ DESTROYED になります。(I86552b/198741720
  • null 許容の NavDeepLink 引数にデフォルト値は不要になりました。(Ia14efb/198689811
  • 新しいグラフで setGraph() を呼び出すと、バックスタックをポップする以前の動作に加えて、保存されたバックスタックもクリアされるようになりました。(I97f96
  • launchSingleTop の使用時に OnDestinationChangedListener インスタンスと currentBackStackEntryFlow が通知されない問題を修正しました。(Iaaebc

依存関係の更新

バージョン 2.4.0-alpha08

2021 年 9 月 1 日

androidx.navigation:navigation-*:2.4.0-alpha08 がリリースされました。バージョン 2.4.0-alpha08 に含まれる commit については、こちらをご覧ください。

新機能

  • NavType クラスを拡張してカスタムの NavType を作成できるようになりました。カスタム型がサポートされるのは、ナビゲーション グラフ Kotlin DSL などを使用してプログラムでナビゲーション グラフを作成する場合に限られます。(I78440b/196871885

動作の変更

  • アクションを生成するとき、Safe Args から生成された Kotlin コードが、デフォルト値のある引数の前にデフォルト値のない引数をパラメータとして置くようになりました。(Idb697b/188855904
  • ディープリンクが、すべての必須の引数(デフォルト値のない引数)が Uri に存在することを確認するようになりました。(#204b/185527157

バグの修正

  • composable() 内で getBackStackEntrypreviousBackStackEntryremember() とともに使用しても、バックスタックにデスティネーションがないことについて例外がスローされないようになりました。(I75138b/194313238
  • バックスタック引数を変更して launchSingleTop=true を使用する際に、Navigation Compose が適切に再コンポーズされるようになりました。(Iebd69b/186392337
  • 13 個または 29 個のデスティネーションを持つグラフで setGraph を呼び出す場合に ArrayIndexOutOfBoundsException がなくなりました。(I1a9f1b/195171984
  • SafeArgs Java 生成ツールが、Args クラスを生成するときに lint 警告を発生させなくなりました。(I1a666b/185843837

外部からの協力

  • ディープリンクがすべての必須の引数(デフォルト値のない引数)が Uri に存在することを確認するようにした ospixd 様に感謝いたします。(#204b/185527157

バージョン 2.4.0-alpha07

2021 年 8 月 18 日

androidx.navigation:navigation-*:2.4.0-alpha07 がリリースされました。バージョン 2.4.0-alpha07 に含まれる commit については、こちらをご覧ください。

バグの修正

  • Navigation Compose で複数のバックスタックの機能の使用中に、構成の変更後とグラフの変更時に状態が適切に保存されるようになりました。(If5a3db/195141957
  • 複数のバックスタックを持つ Navigatioin Compose の使用時に同じタブを再選択しても、画面が空白になることはなくなりました。(I860dcb/194925622
  • NavHostNavBackStackEntryLifecycle.State の変更を監視するようになりました。そのため、フラグメントで NavHost を使用すると、画面が空白になるのではなく、ライフサイクルの変更として適切に再コンポーズされるようになりました。(I4eb85b/195864489
  • アクティビティを再作成した後(構成の変更後)、DialogFragment を閉じると NavController の状態が正しく更新されない問題を修正しました。(Icd72b
  • ダイアログ デスティネーションをポップすると、NavController のシステムの [戻る] ボタン処理が更新されず、バックスタックにポップがない場合でも、NavController が [戻る] ボタンをインターセプトする可能性がある問題を修正しました。(If3b34
  • Safe-args が、ViewModel コードのテストに使用できる引数の toSavedStateHandle メソッドを自動的に生成するようになりました。(If1e2db/193353880

バージョン 2.4.0-alpha06

2021 年 8 月 4 日

androidx.navigation:navigation-*:2.4.0-alpha06 がリリースされました。バージョン 2.4.0-alpha06 に含まれる commit については、こちらをご覧ください。

API の変更

  • AbstractListDetailFragmentrequireSlidingPaneLayout() メソッドと requireDetailPaneNavHostFragment() メソッドの名前がそれぞれ getSlidingPaneLayout()getDetailPaneNavHostFragment() に変更されました。(I34a08

動作の変更

  • Crossfade などのアニメーションで移動する場合、新しいデスティネーションの Lifecycle は、アニメーションが完了した場合にのみ RESUMED に到達するようになりました。(If0543b/172112072b/194301889
  • Navigation Compose の NavHost で、グラフを最初のコンポジションの一部として設定するようになりました。(Ieb7be

バグの修正

  • ナビゲーション グラフの最後のデスティネーションをポップした際に、ClassCastException がスローされなくなりました。(If0543b/172112072b/194301889
  • Uri を使用せずにディープリンクを追加し、ルートまたはディープリンク経由で移動すると発生する NullPointerException を修正しました。(938a0cb/193805425
  • ディープリンクされた NavBackStackEntryRESUMED 状態に到達しない 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 が、デスティネーション間を移動する際に常にクロスフェードを使用するようになりました。(I07049b/172112072
  • NavHost のグラフを変更できるようになりました。グラフの startDestination とデスティネーションが同じグラフは同等とみなされ、NavController バックスタックはクリアされません。(I0b8dbb/175392262

バグの修正

  • NavController の状態のリエントラント アップデートにより発生する、NavBackStackEntry にアタッチされた LifecycleObserver 内から popBackStack() を呼び出すときの NoSuchElementException を修正しました。(I64621
  • AbstractListDetailFragment では、AbstractListDetailFragment が使用されていない場合に SlidingPaneLayout を APK から完全に削除できるようになりました。(I611ad
  • NavGraphNavDestination が equals メソッドをオーバーライドするようになりました。これにより、同じ値を持つ 2 つのオブジェクトは同等とみなされます。(I166ebb/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 を実装として使用します)を管理します。(Iac4beb/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 の変更

  • NavigatorStateadd 関数の名前が push に変更されました。add() の現在の呼び出しはすべて、push() に変更する必要があります。(Ie89fcb/172112072
  • Navigator のカスタム インスタンスで、NavigatorStatepushWithTransaction API と popWithTransition API を使用してデスティネーションを非同期にプッシュまたはポップできるようになりました。なお、この API は、含まれているどのナビゲータでもまだ使用されていません。(Ic4d7cb/172112072

動作の変更

  • NavDeepLinkBuilder で、createPendingIntent() から返された PendingIntentPendingIntent.FLAG_IMMUTABLE が追加され、Android 12 をターゲットとしたときにこの API が期待どおりに機能するようになりました。(If8c52

バグの修正

  • グラフに渡された引数が動的にインクルードされるグラフに正しく渡されない <include-dynamic> の問題を修正しました。(I3e115
  • string[] 引数を使用してデフォルト値 @null があるデスティネーションに移動したときの NullPointerException を修正しました。(I1fbe8
  • @Navigator.Name の ProGuard ルールを追加し、R8 3.1 フルモードを使用する際の問題を修正しました。(I2add9b/191654433
  • SafeArgs は、1.5.0 より前のバージョンの Kotlin でアプリをビルドしても失敗しなくなります。(Icd1ffb/190739257

バージョン 2.4.0-alpha03

2021 年 6 月 16 日

androidx.navigation:navigation-*:2.4.0-alpha03 がリリースされました。バージョン 2.4.0-alpha03 に含まれる commit については、こちらをご覧ください

バグの修正

  • インクルードされたダイナミック グラフへの移動に 2 つの navigate() 呼び出しが必要となる問題を修正しました。(I7785cb/188859835
  • Navigation 2.4.0-alpha01 で生じる回帰を修正しました。ユーザーがトップレベル デスティネーションにいるとき、setupActionBarWithNavController() が「上へ」アイコンを正しく削除しませんでした。(I5d443b/189868637
  • NavController のルートグラフを先にポップした後に popBackStack() を呼び出す場合に発生する IllegalStateException を修正しました。(I2a330b/190265699
  • navigation-common またはそれに依存するアーティファクトを使用したときに、by navArgs() の ProGuard ルールが正しく適用されるようになりました。(I68800b/190082521
  • 初めてコールバックを受信したときに navigate() を呼び出す OnDestinationChangedListener が、移動先のデスティネーションを含む次のコールバックを正しく取得するようになりました。(Ie5f9eb/190228815
  • 動的機能モジュールと AGP 7.0 以降で使用したときに Safe Args がクラッシュすることがなくなりました。(I69518b/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 全体でサポートされるようになりました。(Ib5544Ia617bI22f96b/188914648b/188901565
  • NavigationUI で、状態の保存を無効にする試験的 API を一時的に追加しました。常に状態を保存するのが正しい動作ですが、状態の保存時に対応できない非推奨となったライブラリが引き続き使用されています(保持されたフラグメントなど)。この追加により、非対応の API の使用をアプリから減らすための時間的余裕が生まれます。(Idf93c
  • Navigation に、カスタム NavigationUI の実装に役立つ findDestination() API と getHierarchy() API が追加されました。findDestination() は、NavGraph の拡張関数です。グラフ内でデスティネーションを見つけます。getHierarchy() は、NavDestination の関数です。指定されたデスティネーションが別のデスティネーションの階層にあるかどうかを確認できます。(I2932fb/188183365

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • BottomNavigationView を受け取る NavigationUI メソッドが更新され、代わりに Material 1.4.0NavigationBarView で導入されたスーパークラスを受け取るようになりました。これにより NavigationRailView とともに使用できるようになります。(Ib0b36b/182938895

  • XML から <action> 要素をインフレートする場合に、アニメーション属性で、app:enterAnim="?attr/transitionEnter" 構文を使用してテーマから取得した属性を使用できるようになりました。(I07bc1b/178291654

API の変更

  • ID を使用する Kotlin DSL ビルダーは非推奨となり、 ルートを使用するビルダーに置き換える必要があります(I85b42b/188816479)。 (I9f58fb/188816479)。

バグの修正

  • DialogFragmentNavigator を、システムの [戻る] ボタンが押されて、または外側をクリックされてダイアログが閉じられたときに、NavigatorState.pop() API を使用して NavController に通知するようにしました。これによって、NavController の状態が常に Navigator の状態と同期されるようになります。(I2ead9
  • onDestinationChanged コールバックで OnDestinationChangedListeners のリストを操作するときに、Navigation で ConcurrentModificationException が発生しなくなりました。(Ib1707b/188860458

  • Kotlin で方向プロパティを生成するときに Safe Args がクラッシュすることがなくなりました。(Id2416b/188564435

  • NavDestination の setId メソッドが @IdRes でアノテーションされるように修正し、リソース ID のみを受け付けるようになりました。(I69b80

  • findNode の int パラメータが、resid から resId になりました。(I7711d

依存関係の更新

  • Safe-Args は、Android Gradle プラグイン 4.2.0 に依存するようになりました。これによって、applicationIdTextResource の使用に関する警告が表示されなくなります。(I6d67bb/172824579

バージョン 2.4.0-alpha01

2021 年 5 月 18 日

androidx.navigation:navigation-*:2.4.0-alpha01 がリリースされました。バージョン 2.4.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • NavControllercurrentBackStackEntryAsFlow() メソッドは、現在の NavBackStackEntry が変更されるたびに出力する Flow を提供します。このフローは、OnDestinationChangedListener を手動で管理する代わりに使用できます。(I19c4a#89b/163947280

複数のバックスタック

NavController は、デスティネーションのバックスタックを管理する責任を負っていて、navigate() でデスティネーションに移動する際にバックスタックにそのデスティネーションを追加し、popBackStack() が呼び出されるか、システムの [戻る] ボタンがトリガーされたときにデスティネーションを削除します。既存の NavOptions クラスとナビゲーション グラフ XML の <action> エントリの統合が拡張され、バックスタックの保存と復元をサポートしました。(b/80029773

この変更の一環として、onNavDestinationSelected()BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController()NavigationUI メソッドは、ポップされたデスティネーションの状態を自動的に保存および復元するようになりました。これにより、コードを変更せずに複数のバックスタックをサポートできるようになりました。Fragment で Navigation を使用する場合、複数のバックスタックとの統合には、この方法をおすすめします。(Ie07ca

状態の保存と復元の基盤となる API は、次のようなサーフェスから公開されています。

  • Navigation XML の <action> 要素で、app:popUpToSaveStateapp: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” />
    
  • navOptions Kotlin 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.BuilderNavOptions オブジェクトを手動で作成する場合は、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> デスティネーションに使用される FragmentNavigatorDynamicFragmentNavigator が更新され、新しい Navigator API を使用して状態の保存と復元をサポートするようになりました。

ナビゲーションのルート

ルートは、デスティネーションを一意に識別する String です。このコンセプトは、これまで Navigation Compose でしか使用されていませんでしたが、コア Navigation API の一部になりました。これは、Navigation Kotlin DSL でグラフを作成する際に使用する整数の ID の代わりになります。(b/172823546

ID のみを受け取っていたすべての API に、ルート String を受け取るオーバーロードが追加されました。これには、navigate()popBackStack()popUpTo()getBackStackEntry() が含まれます。

これにより、一部の API が次のように影響を受けます。

  • Kotlin DSL の popUpTo kotlin プロパティは非推奨になりました。popUpToId の使用をおすすめします。(I59c73b/172823546
  • getStartDestination() API は非推奨になりました。getStartDestinationId() の使用をおすすめします。(I0887fb/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 引数は、NavDestinationroute プロパティに置き換えられ、navBackStackEntry.destination.route を直接呼び出せるようになりました。

API の変更

  • すべての Navigation アーティファクトが Kotlin で書き直されました。これにより、ジェネリクスを使用するクラス(NavType サブクラスなど)の null 可能性が改善されました。これまで -ktx アーティファクトに含まれていたすべての Kotlin 拡張関数は、それぞれのメイン アーティファクトに移動されました。-ktx アーティファクトは引き続き公開されますが、完全に空になっています。(b/184292145
  • NavDeepLinkBuilder は、生成されたバックスタックに複数の異なるデスティネーションを追加できるようになりました。(I3ee0db/147913689
  • DynamicNavHostFragment のファクトリ関数を追加しました(Icd515b/175222619
  • NavBackStackEntry の一意の ID が公開 API の一部として公開されるようになりました。(Ie033a
  • name フィールド、argument フィールド、NamedNavArgument の破棄関数が公開になりました。(#174b/181320559
  • 関連するコンポジション ローカルに NavBackStackEntry を提供する新しい NavBackStackEntry#provideToCompositionLocals 拡張を導入しました。(#175b/187229439

Safe Args

  • Safe Args が NavArgs クラスごとに fromSavedStateHandle() メソッドを生成するようになりました。(#122b/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 を更新しました。(#172b/183990444

動作の変更

  • ナビゲーションは、Lifecycle 2.3.1 に依存するようになり、setGraph()popBackStack()navigateUp()navigate()NavBackStackEntry Lifecycle を更新するメソッドを @MainThread とマークし、Navigation を Lifecycle 2.3.0 で導入されたメインスレッド強制に対応させました。(b/171125856
  • ディープリンクからの Enum 引数の解析で、大文字と小文字を区別しないようになりました。列挙型の値が RED でも、http://www.example.com/red のようなディープリンクが www.example.com/{color} ディープリンクとマッチするようになりました。(#152b/135857840

Compose の互換性

  • androidx.navigation:navigation-compose:2.4.0-alpha01 は、Compose バージョン 1.0.0-beta07 以降に対してのみ互換性があります。

バグの修正

  • 末尾の引数のプレースホルダが、接尾辞が完全に一致するディープリンクよりも優先される問題を修正しました。(#153b/184072811
  • NavHostFragment が、デフォルトの DialogFragmentNavigator と同じ @Navigator.Name("dialog") を使用するカスタムの Navigator をサポートするようになりました。(Ib1c2cb/175979140
  • 同じインスタンスで繰り返し呼び出しても問題が発生しないように、NavigatorProvider#addNavigator の動作を改善しました。(#176b/187443146

外部からの協力

  • Safe Args が NavArgs クラスごとに fromSavedStateHandle() メソッドを生成するようにした simonschiller 様に感謝いたします。(#122b/136967621
  • ディープリンクの Enum 引数の解析で大文字と小文字を区別しないようにした Bradleycorn 様に感謝いたします。(#152b/135857840
  • 末尾の引数のプレースホルダが、接尾辞が完全に一致するディープリンクよりも優先される問題を修正した osipxd 様に感謝いたします。(#153b/184072811
  • KotlinPoet 1.8.0 に依存するように Safe Args を更新した tatocaster 様に感謝いたします。(#172b/183990444
  • name フィールド、argument フィールド、NamedNavArgument の破棄関数を公開にした jossiwolf 様に感謝いたします。(#174b/181320559
  • 関連するコンポジション ローカルに NavBackStackEntry を提供する新しい NavBackStackEntry#provideToCompositionLocals 拡張を導入した jossiwolf 様に感謝いたします。(#175b/187229439
  • 同じインスタンスで繰り返し呼び出しても問題が発生しないように、NavigatorProvider#addNavigator の動作を改善した jossiwolf 様に感謝いたします。(#176b/187443146

バージョン 1.0.0-alpha10

2021 年 4 月 7 日

androidx.navigation:navigation-compose:1.0.0-alpha10 がリリースされました。バージョン 1.0.0-alpha10 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavHostModifier を受け入れるようになりました。これは、デスティネーションのコンポーザブルをラップするコンポーズ可能なコンテナに渡されます。(I85acab/175125483

バグの修正

  • NavHost が、NavHost をプレビューしている場合など、OnBackPressedDispatcherOwner が見つからないときでも機能するようになりました。(I7d8b4
  • Navigation Compose が、Navigation 2.3.5 に依存するようになり、NavHost デスティネーション内で BackHandler を使用する際の問題が解決されました。(I7e63bb/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 オブジェクトを設定しようとする問題の修正が含まれます。(I65c24b/177825470

バージョン 1.0.0-alpha08

2021 年 2 月 24 日

androidx.navigation:navigation-compose:1.0.0-alpha08 がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください。

新機能

  • NavHostLocalSavedStateRegistryOwner の CompositionLocal をそのデスティネーションの NavBackStackEntry に入力して、SavedStateRegistry に直接保存されたすべての状態がデスティネーションとともに保存、復元されるようになりました。(I435d7b/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
  • NavHostActivity-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() が機能しない問題を修正しました。(Icea47b/173281473
  • NavHost 内のネストされたグラフへの移動が正しく行われるようになりました。(I0948db/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 がサポートされるようになりました(If96c3b/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 を使用してナビゲーション グラフを作成できる NavHost composable。
  • ライフサイクル、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 タイプにアクセスできるようになりました。(I975c3b/181521877

バグの修正

  • LifecycleOwner として NavBackStackEntry でディスパッチャに追加された OnBackPressedCallbacks が、アクティビティのライフサイクルが STOPPED から STARTED になった後に、適切にインターセプトするようになりました(IFF94Fb/182284739
  • ディープリンク ドメインの解析で大文字と小文字が区別されないようになり、www.example.comwww.example.comwww.Example.com の両方と一致するようになりました。なお、クエリ パラメータ名では、引き続き大文字と小文字が区別されます。(#144b/153829033
  • デスティネーションに null 値非許容のデフォルト引数が複数あり、それらの引数のサブセットのみをオーバーライドしながら、そのデスティネーションに移動したときに発生する場合がある NullPointerException を修正しました。(aosp/1644827

依存関係の更新

  • Navigation Safe Args Gradle プラグインが Kotlin Gradle プラグイン 1.4.31 に依存するようになりました。(aosp/1661058b/181156413

外部からの協力

  • ディープリンク ドメインの解析で大文字と小文字が区別されないようにする pull リクエストに関し、bentrengrove に感謝します。(#144b/153829033

バージョン 2.3.4

バージョン 2.3.4

2021 年 3 月 10 日

androidx.navigation:navigation-*:2.3.4 がリリースされました。バージョン 2.3.4 に含まれる commit については、こちらをご覧ください

新機能

  • ディープリンク URI の一部として送信された ReferenceType 引数が適切に解析されるようになりました。これにより、未加工の整数値と、0x で始まる 16 進数値の両方がサポートされます。(#127b/179166693
  • app:argType="float" の引数の android:defaultValue で整数のデフォルト値がサポートされるようになったことで、android:defaultValue="0" を使用できるようになり、0.0 を使用する必要がなくなりました。(#117b/173766247

バグの修正

  • Navigation の動的機能のサポートを使用するとインストールの進行状況が停滞する問題を修正しました。(Ib27a7b/169636207
  • すでに設定されている同じオブジェクトで setViewModelStore または setLifecycleOwner を呼び出すと、no-op になるようになりました。(Idf491b/177825470
  • Safe-Args で、java 使用時の適切なメソッドに抑制アノテーションが追加されました。(I8fbc5b/179463137

外部からの協力

  • pull リクエストにより、ディープリンク URI の一部として送信された ReferenceType 引数が適切に解析されるようになりました。JvmName に感謝いたします。(#127b/179166693
  • pull リクエストにより、app:argType=”float” の引数の defaultValue で整数のデフォルト値をサポートできるようになりました。tatocaster に感謝いたします。(#117b/173766247

バージョン 2.3.3

バージョン 2.3.3

2021 年 1 月 27 日

androidx.navigation:navigation-*:2.3.3 がリリースされました。バージョン 2.3.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • LifecycleCREATED に移動される前に NavBackStackEntry をポップしてもクラッシュしなくなりました。(Ie3ba3
  • b/171364502 が原因で回帰が発生する問題(アニメーション リソース値が 0 のアクティビティに移動すると ResourceNotFoundException がスローされる)を修正しました。(I7aedbb/176819931

バージョン 2.3.2

バージョン 2.3.2

2020 年 12 月 2 日

androidx.navigation:navigation-*:2.3.2 がリリースされました。バージョン 2.3.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • onNavDestinationSelected<activity> のデスティネーションを使用してもアクティビティに移動できない NavigationUI の回帰を修正しました (I22e34b/171364502
  • navigation-dynamic-features-fragment が新しくインストールしたデスティネーションに何度も移動する問題を修正しました。(aosp/1486056b/169636207
  • launchSingleTop の使用時にデフォルトの引数を OnDestinationChangedListener インスタンスに送信できない問題を修正しました。(I2c5cb
  • ネストされたナビゲーション グラフに移動しても、バックスタック上に新しいグラフ インスタンスが作成されない問題を修正しました。(Ifc831
  • ナビゲーション グラフで最後のデスティネーションを削除した popUpTonavigate() を使用すると、すぐには破棄されず、ナビゲーション グラフ自体がバックスタックから削除される問題を修正しました。(I910a3
  • Navigation SafeArgs は、Kotlin の明示的な API モードをサポートする KotlinPoet バージョン 1.7.2 を使用するようになりました。(I918b5
  • NavHostFragment.findNavController(Fragment) は、Fragment 階層と Fragment のビュー階層の既存の確認に加えて、DialogFragment のルート デコレーション ビューも確認するようになりました。これにより、Navigation を使用するダイアログ フラグメントを FragmentScenarioNavigation.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-uiDrawerLayout 1.1.1 に依存するようになりました。これにより、NavigationUILOCK_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 インターフェースに置き換えられました。このインターフェースは CustomView 1.1.0 に追加され、DrawerLayout によって DrawerLayout 1.1.0 内に実装されます。
  • ディープリンクでのアクションと MIME タイプのサポート: ディープリンクが拡張され、以前から利用できる app:uri に加えて app:actionapp: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 については、こちらをご覧ください

バグの修正

  • NavBackStackEntryLifecycle がプロセス終了後に適切に更新されない問題を修正しました。(b/155218371
  • setGraph() を呼び出す前に登録された OnDestinationChangedListener インスタンスが、プロセス終了後、復元されたデスティネーションに適切に送信されるようになりました。(b/155218371
  • singleTop を使用する際に、NavBackStackEntry の引数が正しく更新され、更新された引数がすべての OnDestinationChangeListener インスタンスに送信されるようになりました。(b/156545508

依存関係の更新

バージョン 2.3.0-alpha06

2020 年 4 月 29 日

androidx.navigation:navigation-*:2.3.0-alpha06 がリリースされました。バージョン 2.3.0-alpha06 に含まれる commit については、こちらをご覧ください

新機能

  • ディープリンクが拡張され、以前の app:uri に加えて app:actionapp:mimeType をサポートするようになりました。NavController で、新しい NavDeepLinkRequest クラスを介して、これらのフィールドの任意の組み合わせによるナビゲーションがサポートされるようになりました。(b/136573074b/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 を指定する必要がなくなり、applicationIdmoduleName 接尾辞をピリオドに続けて追加したものをデフォルトで使用します。graphPackage をカスタマイズする必要がある場合は、${applicationId} プレースホルダをご利用いただけるようになりました。(b/152696768
  • ナビゲーション グラフ Kotlin DSL では、アクションの defaultArguments Map を公開し、ナビゲーション XML ファイル内の <action> 要素にデフォルト値を設定する機能をミラーリングするようになりました。(b/150345605

バグの修正

  • Navigation 2.2.2 以降: アクティビティに複数の NavHostFragment インスタンスがある場合に、グラフの最初のデスティネーションにディープリンクする際の IllegalStateException を修正しました。(b/147378752

依存関係の更新

バージョン 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 具象クラスに依存する代わりに、AppBarConfigurationCustomView 1.1.0-alpha02DrawerLayout 1.1.0-alpha04DrawerLayout が実装)で導入された Openable インターフェースを使用するようになり、それによって NavigationUIOpenable のカスタム実装を使用することが可能になりました。(b/129030452

バグの修正

  • navigation-common-ktx ProGuard ルールで、すべての NavArgs インスタンスではなく、使用されている NavArgs クラスのみが正しく保持されるようになりました。(b/150213558

依存関係の変更

  • Navigation の Core 1.2.0 への依存がもとに戻り、Navigation が Core 1.2.0 の新しい API に依存しない場合に、デベロッパーに新しい依存関係に移行することを強制しないようにするために、Core 1.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 以降: DrawerArrowDrawablenavigation-ui ProGuard ルールが更新され、android.enableJetifier=true は必須ではなくなりました。(b/147610424
  • Navigation 2.2.1 以降: navigation-common-ktx モジュールに、navigation-runtime-ktx と同じマニフェスト パッケージ名を共有するのではなく、固有のマニフェスト パッケージ名が付与されました。(aosp/1141947

依存関係の更新

バージョン 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-ktx ProGuard ルールで、すべての NavArgs インスタンスではなく、使用されている NavArgs クラスのみが正しく保持されるようになりました。これは以前に Navigation 2.3.0-alpha03 でリリースされたものです。(b/150213558

依存関係の更新

バージョン 2.2.1

バージョン 2.2.1

2020 年 2 月 5 日

androidx.navigation:navigation-*:2.2.1 がリリースされました。バージョン 2.2.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • クエリ パラメータを持たないディープリンクは、後続の {argument} 要素に追加する、またはディープリンクとの照合を行うのではなく、クエリ パラメータを正しく無視するようになりました。(b/147447512
  • DrawerArrowDrawablenavigation-ui ProGuard ルールを更新し、android.enableJetifier=true は必須ではなくなりました。(b/147610424
  • navigation-common-ktx モジュールに、navigation-runtime-ktx と同じマニフェスト パッケージ名を共有するのではなく、固有のマニフェスト パッケージ名が付与されました。(aosp/1141947

依存関係の更新

バージョン 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 は、ナビゲーション駆動の LifecycleOwnerViewModelStoreOwnerNavController.getViewModelStoreOwner() で返されるものと同じ)、SavedStateRegistryOwner を提供し、さらにそのデスティネーションの開始に使用する引数を提供します。
  • Lifecycle ViewModel SavedState の統合: NavController.getBackStackEntry() または NavController.getViewModelStoreOwner() によって返される ViewModelStoreOwnerby navGraphViewModels() または ViewModelProvider コンストラクトを使用する際、SavedStateViewModelFactory がデフォルト ファクトリになりました。
  • ディープリンクのクエリ パラメータ サポート: クエリ パラメータを持つディープリンクが、順序変更されたクエリ パラメータをサポートするようになりました。ディープリンクのマッチング時、デフォルト値を持つ引数または null 許容の引数がオプションになりました。
  • アニメーション サポートの改善: NavHostFragmentFragment 1.2.0FragmentContainerView を使用するようになり、アニメーションの 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 SavedState 1.0.0-rc03、Activity 1.1.0-rc03、Fragment 1.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
  • ActivitynavArgs() Kotlin 拡張機能で、追加機能がない場合のエラー メッセージを改善しました(b/141408999
  • Safe Args によって生成される Directions Java クラスにデフォルト値が指定されました(b/141099045
  • Safe Args によって生成される Args Java クラスにデフォルト値が指定されました(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 は、ナビゲーション駆動の LifecycleOwnerViewModelStoreOwnerNavController.getViewModelStoreOwner() で返されるものと同じ)、SavedStateRegistryOwner を提供し、さらにそのデスティネーションの開始に使用する引数を提供します(aosp/1101691aosp/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() によって返される ViewModelStoreOwnerby navGraphViewModels() または ViewModelProvider コンストラクタを使用する際、SavedStateViewModelFactory がデフォルト ファクトリになりました(b/135716331

API の変更

  • Navigation 2.1.0-rc01 以降: 2.1.0-alpha02 で導入された NavController で非推奨になった getViewModelStore() API が削除されました。(aosp/1091021

バグの修正

  • NavHostFragmentFragmentContainerView を使用するようになりました。これにより、アニメーションの 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 に移動し、ホストしている LifecycleOwnerOnBackPressedDispatcherViewModelStore に、実装が 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 または CollapsingToolbarLayoutsetupWithNavController() を使用するときに、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() メソッドを優先して、NavControllergetViewModelStore() 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
  • NavControllersetHostOnBackPressedDispatcherOwner() メソッドが NavHostControllersetOnBackPressedDispatcher() メソッドに置き換えられ、これを呼び出す前に 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 を正しく尊重するようになりました。これにより、Navigation 2.1.0-alpha03 での回帰が修正されます。b/132077777
  • DialogFragmentNavigator が、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 の変更

  • NavHostFragmentcreateFragmentNavigator() メソッドを非推奨にし、その機能を新しい onCreateNavController() メソッドに移動しました。これは、NavHostFragment のサブクラス化の際にカスタム ナビゲータを追加する正しいエントリ ポイントであることを明確にするためです。b/122802849
  • hasDeepLink() メソッドが 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.1androidx.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/126082008
  • ActivityNavigator.applyPopAnimationsToPendingTransition で適切なポップ終了アニメーションが適用されない問題を修正しました。b/126237567
  • Safe Args によって生成される Kotlin コードが、R クラスに関連付けられたパッケージ名の infun などの 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
  • NavControllersetGraph() を呼び出すと、バックスタックがリセットされるようになりました。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
  • NavDirectionsgetArguments() から返された Bundle が、@Nullable ではなく @NonNull としてマークされるようになりました。b/123243957

バグの修正

  • NavDeepLinkBuilder が、渡された引数を使用して一意性を判断することにより、同じデスティネーションへの複数の同時 PendingIntent を正しく処理するようになりました。b/120042732
  • NavController が、ネストされた NavHostFragment または他の子フラグメントをバックスタックとともに使用する場合に、popBackStack() オペレーションを正しく処理するようになりました。b/122770335
  • NavigationUI が、Up ボタンのコンテンツ説明を正しく設定するようになりました。b/120395362
  • Safe Args で生成された Directions クラスが、デスティネーションのアクションと同じ ID を持つグローバル アクションを正しく処理するようになりました。b/122962504
  • Safe Args で生成された NavDirections クラスが、equals() が true を返す場合に、等しい hashCode() 値を持つようになりました。b/123043662
  • NavHostFragmentFragmentManager でカスタムの 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/120104424
  • AppBarConfiguration を使用して、navController.navigateUp()false を返したときに呼び出される代替の OnNavigateUpListener インスタンスを設定できるようになりました。b/79993862b/120690961

互換性を破る変更

  • argType="reference" を指定して <argument> を使用した場合、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになりました。b/111736515
  • setup メソッドに合わせて、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/118670572
  • OnDestinationChangedListener が引数の Bundle も渡すようになりました。aosp/837142
  • app:clearTask 属性と app:launchDocument 属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべてのデスティネーションを削除するには、グラフのルートを指定して app:popUpTo を使用してください。b/119628354
  • ActivityNavigator.ExtrasBuilder パターンを使用するようになり、任意の Intent.FLAG_ACTIVITY_ フラグを設定する機能が追加されました。aosp/828140
  • NavController.onHandleDeepLink の名前が handleDeepLink に変更されました。aosp/836063
  • サブクラス化を想定していない多数のクラスとメソッド(NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration など)が 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() を削除しました。代わりに、Navigatornavigate() を呼び出してください。aosp/830663
  • Navigator の大幅なリファクタリングが行われ、OnNavigatorNavigatedListener が不要になりました。代わりに、navigate が移動先の NavDestination を返すようになりました。
  • Navigator インスタンスがポップイベントを NavController に送信できなくなりました。[戻る] ボタンの押下をインターセプトして navController.popBackStack() を呼び出す場合は、OnBackPressedCallback の使用を検討してください。aosp/833716

バグの修正

  • デスティネーションが <navigation> 要素の場合、常に popUpTo が動作するようになりました。b/116831650
  • ネストされたグラフを使用した場合に IllegalArgumentException が発生する各種のバグを修正しました。b/118713731b/113611083b/113346925b/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 日

新機能

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/111455455b/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.indexsetDemoControllerIndex になります。b/79995048
    • 例: action_show_settingsactionShowSettings になります。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 日

動作の変更

  • FragmentNavigatorsetReorderingAllowed(true) を使用するようになりました。b/109826220

  • Navigation で、ディープリンク URL から解析された引数が URL デコードされるようになりました。b/79982454

バグの修正

  • フラグメントのライフサイクル メソッドから Navigation を呼び出す場合に発生する IllegalStateException を修正しました。b/79632233

  • Navigation がサポート ライブラリ 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903

  • defaultNavHost="true" を子フラグメントとして使用する場合に発生する IllegalArgumentException を修正しました。b/79656847

  • NavDeepLinkBuilder を使用する場合に発生する StackOverflowError を修正しました。b/109653065

  • ネストされたグラフに戻る際に発生する IllegalArgumentException を修正しました。b/80453447

  • launchSingleTop を使用する場合にフラグメントが重なる問題を修正しました。b/79407969

  • Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。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 です。