Navigation

Navigation は、Android アプリ内の「目的地」間を移動するためのフレームワークであり、目的地がフラグメント、アクティビティなどのどのコンポーネントとして実装されているかにかかわらず、一貫した API を提供します。

最新の更新 現在の安定版リリース 次のリリース候補 ベータ版リリース アルファ版リリース
2019 年 11 月 7 日 2.1.0 2.2.0-rc02 - -

依存関係の宣言

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

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

    dependencies {
      def nav_version = "2.1.0"

      // Java language implementation
      implementation "androidx.navigation:navigation-fragment:$nav_version"
      implementation "androidx.navigation:navigation-ui:$nav_version"

      // Kotlin
      implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
      implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    }
    

Safe Args

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

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

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

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

apply plugin: "androidx.navigation.safeargs"

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

apply plugin: "androidx.navigation.safeargs.kotlin"

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

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

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

バージョン 2.2.0

バージョン 2.2.0-rc02

2019 年 11 月 7 日

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

依存関係の変更

  • 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 に含まれるコミットについては、こちらをご覧ください

バージョン 2.2.0-beta01

2019 年 10 月 9 日

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

新機能

  • NavDestination とそのサブクラスが toString() をオーバーライドして、デバッグ時に役立つ情報をさらに提供するようになりました(b/141264986

動作の変更点

  • ディープリンクのマッチングの際、余分なクエリ パラメータがあると、マッチングが失敗するのではなく、無視するようになりました(b/141482822

バグの修正

  • クエリ パラメータも指定されている場合、ディープリンクのパス内の引数が無視される問題を修正しました(b/141505755
  • ActivitynavArgs() Kotlin 拡張機能で、追加機能がない場合のエラーメッセージを改善しました(b/141408999
  • Safe Args によって生成される Directions Java クラスにデフォルト値が指定されました(b/141099045
  • Safe Args によって生成される Args Java クラスにデフォルト値が指定されました(b/140123727
  • Toolbar を使用する場合、NavigationUI で 2 つのトップレベルの宛先間を移動したときのテキストの変化がアニメーション化されなくなりました(b/140848160

バージョン 2.2.0-alpha03

2019 年 9 月 18 日

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

動作の変更点

  • 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 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。

新機能

  • クエリ パラメータを持つディープリンクが、順序の変更されたクエリ パラメータをサポートするようになりました。ディープリンクのマッチング時、デフォルト値を持つ引数または null 許容の引数が使用可能になりました(b/133273839
  • NavController.getBackStackEntry() を呼び出して、バックスタック上の宛先またはナビゲーション グラフの ID を渡せるようになりました。返される NavBackStackEntry は、ナビゲーション駆動の LifecycleOwnerViewModelStoreOwnerNavController.getViewModelStoreOwner() で返されるものと同じ)、SavedStateRegistryOwner を提供し、さらにその宛先の開始に使用する引数を提供します(aosp/1101691aosp/1101710

バグの修正

  • ViewPager2 への NavHostFragment の追加が IllegalArgumentException で失敗する問題を修正しました(b/133640271
  • NavInflater が不必要に getResourceName() を呼び出さないようになり、インフレーション時間が最大 40% 高速化されました(b/139213740

バージョン 2.2.0-alpha01

2019 年 8 月 7 日

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

新機能

  • NavController.getViewModelStoreOwner() によって返される ViewModelStoreOwnerby navGraphViewModels() または ViewModelProvider コンストラクタを使用する際、SavedStateViewModelFactory がデフォルト ファクトリになりました(b/135716331

API の変更

  • Navigation 2.1.0-rc01: 2.1.0-alpha02 で導入された NavController でサポートが終了した getViewModelStore() API が削除されました(aosp/1091021

バグの修正

  • NavHostFragmentFragmentContainerView を使用するようになりました。これにより、アニメーションの Z-ordering の問題と Fragment にディスパッチするウィンドウ インセットが修正されます(b/137310379

バージョン 2.1.0

バージョン 2.1.0

2019 年 9 月 5 日

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

2.0.0 以降の重要な変更

  • ViewModels をナビゲーション グラフにスコープ設定: -ktx ライブラリを使用する Kotlin ユーザーの by navGraphViewModels() プロパティ デリゲートを使用するか、または NavController に追加された getViewModelStoreOwner() API を使用して、ナビゲーション グラフのレベルにスコープ設定された ViewModels を作成できるようになりました。詳しくは、宛先間での UI 関連データの共有についての説明をご覧ください。
  • ダイアログの宛先: navigate するときに DialogFragment を表示する <dialog> の宛先を作成できるようになりました。NavHostFragment はデフォルトでダイアログの宛先をサポートしています。詳しくは、DialogFragment からの宛先の作成についての説明をご覧ください。
  • URI による移動: Uri を使用して navigate できるようになりました。宛先に追加した <deepLink> を使用して、そこに移動します。詳しくは、URI を使用した移動についての説明をご覧ください。
  • NavHostController: カスタム NavHost の作成で特に使用されていた API が NavHostController に移動し、ホストしている LifecycleOwnerOnBackPressedDispatcherViewModelStore に、実装が NavController を接続できるようになりました。

バージョン 2.1.0-rc01

2019 年 8 月 7 日

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

API の変更

  • 2.1.0-alpha02 で導入された NavController の、サポートが終了した getViewModelStore() API が削除されました(aosp/1091021

バージョン 2.1.0-beta02

2019 年 7 月 19 日

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

バグの修正

  • 2.1.0-beta01 で導入された意図しない JaCoCo 依存関係を削除しました(b/137782950

バージョン 2.1.0-beta01

2019 年 7 月 17 日

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

新機能

  • NavigationUI は、Toolbar または CollapsingToolbarLayoutsetupWithNavController() を使用するときに、Up ボタンの削除をアニメーション化するようになりました(b/131403621

バグの修正

  • findNavController() を持つ同じコンテナで複数の NavHostFragments を使用する場合のタイミングの問題を修正しました(b/136021571

バージョン 2.1.0-alpha06

2019 年 7 月 2 日

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

新機能

  • NavHostFragment で使用される app:navGraph 属性を navigation-runtime アーティファクトに移動しました。XML を介して追加できるカスタム ナビゲータでは、この属性を使用して Navigation Editor のホストパネルと統合する必要があります(b/133880955

API の変更

  • ViewModelStoreOwner を返す新しい getViewModelStoreOwner() メソッドを優先して、NavControllergetViewModelStore() API のサポートが終了しました(aosp/987010
  • <dialog> の宛先など、フローティング ウィンドウの宛先の実装は、 の宛先すべてに実装されるようになったマーカー インターフェース FloatingWindow に一般化されました。上部のアプリバーを操作する NavigationUI メソッドは、FloatingWindow の宛先を無視するようになりました(b/133600763

動作の変更点

  • <dialog> の宛先を使用している場合、Navigation の状態が画面に表示される状態と同期して正しく維持されるようになりました。結果として、<fragment> の宛先など、ダイアログ以外でアクティビティ以外の宛先に移動すると、Navigation は自動的に <dialog> の宛先をポップするようになりました(b/134089818

バグの修正

  • Navigation は、ディープリンクの処理時にアクティビティを再作成する場合に発生するアニメーションを抑制するようになりました。これにより、ビジュアル フラッシュが修正されます(b/130362979
  • 最初のフラグメントを追加するときに Fragment をポップすると Navigation バックスタックが同期しなくなるバグを修正しました(b/133832218

バージョン 2.1.0-alpha05

2019 年 6 月 5 日

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

API の変更

  • NavController のホスト関連 API の名前を変更し、 の新しいサブクラス NavHostController に移動しました(aosp/966091
  • NavControllersetHostOnBackPressedDispatcherOwner() メソッドが NavHostControllersetOnBackPressedDispatcher() メソッドに置き換えられ、これを呼び出す前に setLifecycleOwner() の呼び出しが必要になりました(aosp/965409
  • 以前 setHostOnBackPressedDispatcherOwner() によって返されていた NavHostOnBackPressedManager クラスを置き換える enableOnBackPressed(boolean) メソッドが NavHostController に追加されました(aosp/966091

バグの修正

  • URI で移動した後にバックスタックが正しくないという問題を修正しました(b/132509387
  • NavController によって自動的に処理されるディープリンクが、一度だけトリガーされるようになりました(b/132754763

バージョン 2.1.0-alpha04

2019 年 5 月 16 日

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

バグの修正

  • NavHostFragment がシステムの [戻る] ボタンのイベントをインターセプトする際に、app:defaultNavHost を正しく尊重するようになりました。これにより、Navigation 2.1.0-alpha03 での回帰が修正されます。b/132077777
  • DialogFragmentNavigator が、popBackStack()navigateUp() のオペレーションを正しく処理するようになりました。b/132576764
  • ネストされたグラフ間を繰り返し移動する場合の、IllegalStateException: unknown destination during restore の問題を修正しました。b/131733658

バージョン 2.1.0-alpha03

2019 年 5 月 7 日

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

既知の問題

  • app:defaultNavHost="false" を指定しているにもかかわらず、NavHostFragment がシステムの [戻る] ボタンをインターセプトし続ける。b/132077777

新機能

  • navigate するときに DialogFragment を表示する <dialog> の宛先を作成できるようになりました。NavHostFragment は、ダイアログの宛先をデフォルトでサポートしています。b/80267254
  • リソース ID または NavDirections インスタンスで navigate を呼び出すだけでなく、Uri を介して移動できるようになりました。宛先に追加した <deepLink> を使用して正しい宛先に移動できます。b/110412864

動作の変更点

  • NavigationUI が提供するデフォルトのアニメーションが、アクティビティとフラグメントのデフォルトのアニメーション速度に合わせて、400 ミリ秒から 220 ミリ秒に高速化されました。b/130055522

API の変更

  • NavHostFragmentcreateFragmentNavigator() メソッドのサポートを終了し、その機能を新しい onCreateNavController() メソッドに移動しました。これは、 のサブクラス化の際にカスタム ナビゲータを追加する正しいエントリ ポイントであることを明確にするためです。b/122802849
  • hasDeepLink() メソッドが NavDestination に追加され、指定の Uri がその宛先で処理できるかどうか、または、NavGraph の場合はナビゲーション グラフの任意の宛先で処理できるかどうかを確認できるようになりました。b/117437718

バグの修正

  • デフォルトの引数が OnDestinationChangedListener インスタンスに正しく渡されるようになりました。b/130630686
  • NavHostFragment が、OnBackPressedDispatcher を使用してシステムの Back イベントをインターセプトするようになりました。これにより、Fragment に戻る際に Fragment ライフサイクル メソッドで条件付き移動を行う場合の問題が修正されます。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 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。

新機能

  • 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 の最初のアルファ版リリースです。

依存関係の変更

  • ナビゲーションは androidx.core:core:1.0.1androidx.fragment:fragment:1.1.0-alpha05 に依存するようになりました。このリリースでは、androidx.legacy:legacy-support-core-utils:1.0.0 への依存関係も削除されます。b/128632612

API の変更

  • リソース ID と Bundle でクリック リスナーを作成する代替手段として、新しい Navigation.createNavigateOnClickListener(NavDirections) メソッドが追加されました。b/127631752
  • FragmentNavigator.instantiateFragment のサポートは終了しました。デフォルトの実装は、FragmentFactory を使用して Fragment をインスタンス化するようになりました。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 と同等に変更されます。

2.0.0-rc02 の動作は Navigation 1.0.0-rc02 の動作と同じです。新しい依存関係に一致するように依存関係を更新する場合を除き、1.0.0-rc02 から更新するためにコードを変更する必要はありません。

Navigation の 2.X リリースを使用するには、プロジェクトが AndroidX に移行されている必要があります。Navigation 1.0 安定版は、サポート ライブラリの依存関係を使用する最後のリリースになります。1.0 以降の今後の開発はすべて AndroidX に基づき、2.0 安定版リリースを基にしてビルドされます。

AndroidX 以前の依存関係

AndroidX 以前のバージョンの Navigation では、次の依存関係を含めます。

dependencies {
        def nav_version = "1.0.0"

        implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
        implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
    }
    

Safe Args では、次のクラスパス最上位build.gradle ファイルに追加します。

buildscript {
        repositories {
            google()
        }
        dependencies {
            classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
        }
    }
    

バージョン 1.0.0

バージョン 1.0.0

2019 年 3 月 14 日

Navigation 1.0.0 がリリースされました。1.0.0-rc02 からの変更はありません。

バージョン 1.0.0-rc02

2019 年 2 月 26 日

これは Navigation の 1.0.0 安定版リリースでの 2 番目のリリース候補です。このリリースには、多数のバグの修正が含まれています。

バグの修正

  • ルートグラフに ID がない場合に popBackStack() が無視される問題を修正しました。b/126251695
  • navigateUp() が、FLAG_ACTIVITY_NEW_TASK なしでディープリンクを処理した後に呼び出された場合に、アプリのタスクに戻る移動を正しく処理するようになりました。b/126082008
  • ActivityNavigator.applyPopAnimationsToPendingTransition で適切なポップ終了アニメーションが適用されない問題を修正しました。b/126237567
  • Safe Args によって生成される Kotlin コードが、R クラスに関連付けられたパッケージ名の infun などの Kotlin キーワードを適切にエスケープするようになりました。b/126020455

バージョン 1.0.0-rc01

2019 年 2 月 21 日

これは、Navigation の 1.0.0 安定版リリースのリリース候補です。このリリースには 1 つのバグの修正が含まれています。

バグの修正

  • Fragment と 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 経由で同一に扱われるようになりました。結果として、app:argType="reference" を指定された引数のみが、別のリソース(たとえば @color/colorPrimary)を指すデフォルト値を持つことができます。別の 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
  • 1 つの popBackStack() オペレーションで、一度に 1 つの宛先だけではなく、宛先のすべてのコピーがバックスタックの一番上からポップされるという回帰を修正しました。b/123552990
  • FragmentNavigator 状態が NavController の状態と同期しなくなり、バックスタックを復元しようとすると IllegalStateException が発生する問題を修正しました。b/123803044
  • ProGuard を難読化して使用すると、NavigationUI 処理された戻る矢印が表示されない問題を修正しました。b/123449431
  • Safe Args によって生成されたコードが、.OuterClass$InnerClass 形式の静的内部クラスを指す app:argType の使用を適切に処理するようになりました。b/123736741
  • Safe Args によって生成された Java コードが、グローバル アクションと深くネストされた宛先を適切に処理するようになりました。b/123347762

バージョン 1.0.0-alpha11

2019 年 1 月 23 日

これは、Safe Args の問題を修正する 1.0.0-alpha10 のホットフィックス リリースです。

バグの修正

  • Safe Args がグローバル アクションに関連付けられた Directions クラスをインポートできない問題を修正しました。b/123307342

バージョン 1.0.0-alpha10

2019 年 1 月 23 日

既知の問題

  • Safe Args がグローバル アクションに関連付けられた Directions クラスをインポートできない。b/123307342

このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。

新機能

  • Kotlin ユーザーは by navArgs() プロパティのデリゲートを使用して、Activity または Fragment で、Safe Args が生成した NavArgs クラスへの参照を必要に応じて取得できるようになりました。b/122603367
  • Safe Args で、androidx.navigation.safeargs.kotlin プラグインを適用して Kotlin コードを生成できるようになりました。Kotlin コードは、以前の androidx.navigation.safeargs プラグインを介してまだ利用可能なビルダー パターンにデフォルトの引数と不変クラスを使用して、Kotlin 専用のモジュールとしてビルドされます。b/110263087

動作の変更点

  • ディープリンクのマッチングで、一致する引数が最も多いディープリンクが優先されるようになりました。b/118393029
  • NavControllersetGraph() を呼び出すと、バックスタックがリセットされるようになりました。b/111450672
  • 不明なディープリンクは IllegalStateException をスローせず、無視されるようになりました。これにより、ネストされた、または複数の NavHostFragment での問題が修正されます。b/121340440

互換性を破る変更

  • Activity にポップ アニメーションを適用する NavOptions.applyPopAnimationsToPendingTransition() メソッドが ActivityNavigator に移動されました。b/122413117
  • Safe Args が、引数のないアクションの同一クラスの重複を回避するようになりました。生成された NavDirections クラスの、引数のないメソッドの戻り値の型は、NavDirections になりました。b/123233147
  • Safe Args によって生成された Directions クラスには、パブリック コンストラクタがなくなりました。生成された静的メソッドのみを使用する必要があります。b/123031660
  • Safe Args によって生成された NavDirections クラスには、パブリック コンストラクタがなくなりました。これらのクラスの生成は、生成された Directions クラスの静的メソッドを介してのみ行う必要があります。b/122963206
  • NavDirectionsgetArguments() から返された Bundle が、@Nullable ではなく @NonNull としてマークされるようになりました。b/123243957

バグの修正

  • NavDeepLinkBuilder が、渡された引数を使用して一意性を判断することにより、同じ宛先への複数の同時 PendingIntent を正しく処理するようになりました。b/120042732
  • NavController が、ネストされた NavHostFragment または他の子 Fragment をバックスタックとともに使用する場合に、popBackStack() オペレーションを正しく処理するようになりました。b/122770335
  • NavigationUI が、Up ボタンのコンテンツ説明を正しく設定するようになりました。b/120395362
  • Safe Args で生成された Directions クラスで、宛先のアクションと同じ ID を持つグローバル アクションを正しく処理するようになりました。b/122962504
  • Safe Args によって生成された NavDirections クラスで、equals() が true を返す場合に、hashCode() が正しく同じ値になるようになりました。b/123043662
  • NavHostFragmentFragmentManager でカスタムの FragmentTransactions を行おうとした場合に、FragmentNavigator が適切なエラー メッセージをスローするようになりました。常に getChildFragmentManager() を使用する必要があります。b/112927148

バージョン 1.0.0-alpha09

2018 年 12 月 18 日

このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。

android.arch.navigation:navigation-testing アーティファクトの開発は継続しないこととなりました。このアーティファクトが NavController の内部テストに役立つことは実証済みですが、別のテスト戦略(navigate() が適切に呼び出されていることを確認するために NavController インスタンスをモックするなど)を採用することを強くおすすめします。このアプローチは、AndroidDevSummit 2018 での単一アクティビティに関する講演で詳しく説明されています。また、Navigation を使用したテストに関する補足ドキュメントで具体的に検討する予定です。

新機能

  • menuCategory="secondary" を指定した MenuItem は、NavigationUI メソッドとともに使用した場合に、バックスタックをポップしなくなりました。b/120104424
  • AppBarConfiguration を使用して、navController.navigateUp()false を返したときに呼び出される代替の OnNavigateUpListener インスタンスを設定できるようになりました。b/79993862b/120690961

互換性を破る変更

  • argType="reference" を指定して <argument> を使用すると、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになります。b/111736515
  • setup メソッドに合わせて、onNavDestinationSelected() がデフォルトでナビゲーション グラフの最初の宛先のポップに戻るようになりました。バックスタックがポップされないようにするには、menuCategory="secondary"MenuItem に追加してください。aosp/852869
  • 生成された Args クラスの fromBundle() メソッドが、null 許容の Bundle ではなく、非 null の Bundle を受け取るようになりました。aosp/845616

バグの修正

  • ディープリンクから引数が常に文字列として解析されるのではなく、正しい argType として適切に解析されるようになりました。b/110273284
  • Navigation がそのパブリック リソースを適切にエクスポートするようになりました。b/121059552
  • Safe Args に Android Gradle プラグイン 3.4 Canary 4 以上との互換性が備わりました。b/119662045

バージョン 1.0.0-alpha08

2018 年 12 月 6 日

このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。

新機能

  • 宛先のラベルを NavigationUI メソッドで使用した場合、android:label{argName} インスタンスが適切な引数に自動的に置き換えられるようになりました。b/80267266
  • Navigation がサポート ライブラリ 28.0.0 に依存するようになりました。b/120293333

互換性を破る変更

  • OnNavigatedListener の名前が OnDestinationChangedListener に変更されました。b/118670572
  • OnDestinationChangedListener が引数の Bundle も渡すようになりました。aosp/837142
  • app:clearTask 属性と app:launchDocument 属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべての宛先を削除するには、app:popUpTo にグラフのルートを指定して使用してください。b/119628354
  • ActivityNavigator.ExtrasBuilder パターンを使用するようになり、任意の Intent.FLAG_ACTIVITY_ フラグを設定する機能が追加されました。aosp/828140
  • NavController.onHandleDeepLink の名前が handleDeepLink に変更されました。aosp/836063
  • サブクラス化を意図していない多数のクラスとメソッド(NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration など)が final に設定されました。aosp/835681
  • サポートが終了した NavHostFragment.setGraph() メソッドが削除されました。aosp/835684
  • サポートが終了した NavigationUI.navigateUp(DrawerLayout, NavController) メソッドが削除されました。aosp/835684
  • Fragment 作成機能が FragmentNavigator に移動し、Fragment の作成を簡単に FragmentFactory にデリゲートできるようになりました。b/119054429
  • NavGraphNavigator のコンストラクタが Context を取得しなくなりました。aosp/835340
  • NavigatorProvider がインターフェースではなくクラスになりました。getNavigatorProvider() から返される NavigatorProvider の機能は変更されていません。aosp/830660
  • NavDestination.navigate() が削除されました。代わりに、Navigatornavigate() を呼び出してください。aosp/830663
  • Navigator の大幅なリファクタリングが行われ、OnNavigatorNavigatedListener が不要になりました。代わりに、navigate が移動先の NavDestination を返すようになりました。
  • Navigator インスタンスがポップイベントを NavController に送信できなくなりました。[戻る] ボタンの押下をインターセプトして navController.popBackStack() を呼び出す場合は、OnBackPressedCallback の使用を検討してください。aosp/833716

バグの修正

  • 宛先が <navigation> 要素の場合、常に popUpTo が動作するようになりました。b/116831650
  • ネストされたグラフを使用した場合に IllegalArgumentException で発生する各種バグを修正しました。b/118713731b/113611083b/113346925b/113305559
  • <activity> の宛先の dataPattern 属性で toString() を呼び出した場合、引数が文字列以外の引数から設定されるようになりました。b/120161365

Safe Args

  • Safe Args がシリアル化可能なオブジェクト(列挙値など)をサポートするようになりました。列挙型では、クラス名を指定せずに列挙リテラルをそのまま使用することによって、デフォルト値を設定できます(例: app:defaultValue="READ")。b/111316353
  • Safe Args がサポート対象のすべての型の配列をサポートするようになりました。b/111487504
  • Safe Args ではリソース ディレクトリのサブフォルダが無視されるようになりました。b/117893516
  • Safe Args では必要に応じて、@Override アノテーションが追加されるようになりました。b/117145301

バージョン 1.0.0-alpha07

2018 年 10 月 29 日

新機能

  • 新しい AppBarConfiguration クラスを使用して、最上位の宛先をカスタマイズできるようになりました。詳しくは、最新のドキュメントをご覧ください。b/117333663
  • グラフの最初の宛先に引数を渡せるようになりました。b/110300470
  • ディープリンクが、ピリオド、ハイフン、プラス記号を含むカスタム形式をサポートするようになりました。b/112806402

互換性を破る変更

  • navigation-testing-ktx モジュールが navigation-testing artifact に組み込まれ、今後は公開されなくなりました。
  • navigation-testing アーティファクトが Kotlin 標準ライブラリに依存するようになりました。Kotlin の規則との整合性を強化するために API が変更されましたが、Java で作成されたテストでは API を引き続き使用できます。
  • メタデータ マニフェストに登録されたナビゲーション グラフがサポートされなくなりました。b/118355937
  • アクションを <activity> の宛先に関連付けられなくなりました。aosp/785539

バグの修正

  • ディープリンクがクエリ パラメータを正しく解析できるようになりました。b/110057514
  • アクティビティの宛先が開始と終了のすべてのアニメーションに正しく適用されるようになりました。b/117145284
  • カスタム ナビゲータを使用している場合に設定の変更後に発生するクラッシュを修正しました。b/110763345

Safe Args

  • Safe Args の Android Gradle プラグイン 3.2.1 に対する依存関係が修正されました。b/113167627
  • 内部クラス用の Directions を生成できるようになりました。b/117407555
  • <include> グラフに対する Directions の生成に関する問題を修正しました。b/116542123

バージョン 1.0.0-alpha06

2018 年 9 月 20 日

新機能

API の変更

  • 互換性を破る変更: ナビゲータの navigate() メソッドが Navigator.Extras パラメータを受け取るようになりました。
  • NavController の getGraph() メソッドが NonNull になりました。b/112243286

バグの修正

  • NavigationUI.setupWithNavController() を各宛先からビューとともに使用する場合、ビューがリークしなくなりました。b/111961977
  • ナビゲータの onSaveState() が 1 度だけ呼び出されるようになりました。b/112627079

Safe Args

  • Navigation の宛先の 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 では常に、現在の Fragment がメインのナビゲーション フラグメントとして設定され、外部の NavController がポップされる前に子フラグメント マネージャーがポップされるようになります。b/111345778

Safe Args

  • 互換性を破る変更: app:type が、他のライブラリ(ConstraintLayout 2.0.0-alpha1 など)との競合を避けるために、app:argType に変更されました。b/111110548
  • Safe Args からのエラー メッセージをクリックできるようになりました。b/111534438
  • Args クラスでは、NonNull 属性が実際に null ではないことが確認されるようになりました。b/111451769
  • NavDirections と Args によって生成されたクラスに NonNull アノテーションが追加されました。b/111455455b/111455456

バグの修正

  • フラグメントの宛先にディープリンクした後に発生する、システムの [戻る] ボタンに関する問題を修正しました。b/111515685

バージョン 1.0.0-alpha03

2018 年 7 月 12 日

Navigation 1.0.0-alpha03 と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。

API / 動作の変更

  • ツールバー用の NavigationUI.setupWithNavController メソッドが追加されました。b/109868820
  • CollapsingToolbarLayout 用の NavigationUI.setupWithNavController メソッドが追加されました。b/110887183
  • バックスタックが空の場合、または特定の宛先 ID がバックスタック内にない場合に、popBackStack() から false が返されるようになりました。b/110893637
  • FragmentManager が状態を保存した後に、FragmentNavigator がナビゲーション操作が無視するようになったことで、「Can not perform this action after onSaveInstanceState」例外を回避できるようになりました。b/110987825

Safe Args

  • 互換性を破る変更: アクション名と引数名に含まれる英数字以外の文字が、それぞれの NavDirections メソッドの名前ではキャメルケースで置き換えられます。
    • 例: DemoController.indexsetDemoControllerIndex になります。b/79995048
    • 例: action_show_settingsactionShowSettings になります。b/79642240
  • 互換性を破る変更: デフォルトでは、引数が null ではないと見なされるようになりました。文字列と Parcelable の引数に null 値を許可するには、app:nullable="true" を追加します。b/79642307
  • 「123L」の形式で defaultValues を指定して、app:type="long" を使用できるようになりました。b/79563966
  • Parcelable の引数がサポートされるようになりました(app:type には完全修飾クラス名を使用します)。サポートされる唯一のデフォルト値は "@null" です。b/79563966
  • Args クラスに equals()hashCode() が実装されました。b/79642246
  • Safe Args プラグインをライブラリ プロジェクトに適用できるようになりました。b/80036553
  • Safe Args プラグインを機能プロジェクトに適用できるようになりました。b/110011752

バグの修正

  • Fragment のライフサイクル メソッドでのナビゲーションの際に発生する問題を修正しました。b/109916080
  • ネストされたグラフを介して複数回ナビゲーションする際に発生する問題を修正しました。b/110178671
  • グラフで最初の宛先を指定して setPopUpTo を使用する場合に発生する問題を修正しました。b/109909461
  • app:defaultValue のすべての値が文字列として渡されていた問題を修正しました。b/110710788
  • Android Gradle プラグイン 3.2 Beta 01 にバンドルされている aapt2 で、Navigation XML ファイル内のすべての android:name 属性に関する保持ルールが追加されました。b/79874119
  • デフォルトの FragmentNavigator を置き換える際に発生するメモリリークを修正しました。b/110900142

バージョン 1.0.0-alpha02

2018 年 6 月 7 日

動作の変更点

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

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

バグの修正

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

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

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

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

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

  • launchSingleTop を使用する場合に Fragment が重なる問題を修正しました。b/79407969

  • Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。b/79734195

  • NavigationUI で、ネストされたグラフを MenuItem として使用する場合に適切なアイテムをハイライト表示できるようになりました。b/109675998

API の変更

  • アクションの clearTask 属性と、NavOptions の関連する API のサポートが終了しました。b/80338878

  • アクションの launchDocument 属性と、NavOptions の関連する API のサポートが終了しました。b/109806636

バージョン 1.0.0-alpha01

2018 年 5 月 8 日

Navigation は、アプリ内ナビゲーションを作成するためのフレームワークを提供します。この初回リリースは 1.0.0-alpha01 です。