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