Navigation

Navigation は、Android アプリケーション内の「目的地」間を移動するためのフレームワークであり、目的地がフラグメント、アクティビティ、またはその他のコンポーネントとして実装されているかどうかにかかわらず、一貫した API を提供します。詳しくは、リファレンス ドキュメントをご覧ください。

依存関係の宣言

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

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

apply plugin: "androidx.navigation.safeargs"

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

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

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

バージョン 2.2.0-alpha02

2019 年 9 月 5 日

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

新機能

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

バグの修正

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

バージョン 2.1.0

2019 年 9 月 5 日

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

2.0.0 以降の重要な変更

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

バージョン 2.2.0-alpha01

2019 年 8 月 7 日

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

新機能

  • SavedStateViewModelFactory は、NavController.getViewModelStoreOwner() によって返される ViewModelStoreOwnerby navGraphViewModels() または ViewModelProvider コンストラクタを使用するときのデフォルト ファクトリになりました。(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-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> の宛先など、フローティング ウィンドウの宛先の実装は、<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 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。

API の変更

  • NavController のホスト関連 API の名前を変更し、NavController の新しいサブクラス NavHostController に移動しました。(aosp/966091
  • NavController setHostOnBackPressedDispatcherOwner() メソッドが 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 がシステムの Back ボタンイベントをインターセプトする際に、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 がシステムの Back ボタンイベントをインターセプトし続ける。b/132077777

新機能

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

動作の変更

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

API の変更

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

バグの修正

  • デフォルトの引数が OnDestinationChangedListener インスタンスに正しく渡されるようになりました。b/130630686
  • NavHostFragment が、OnBackPressedDispatcher を使用してシステムの Back イベントをインターセプトするようになりました。これにより、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 の最初のアルファ版リリースです。

依存関係の変更

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

API の変更

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

バグの修正

  • 宛先にアタッチされた引数がある場合に、Navigation が null Bundle を送信しなくなりました。これにより、android:defaultValue="@null" を使用するときの問題が修正されます。 b/128531879
  • Safe Args が KotlinPoet 1.1.0 に依存するようになりました。これにより、非常に長いパッケージ名での問題が修正されます。 b/123654948

バージョン 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

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 が Support Library 28.0.0 に依存するようになりました。b/120293333

互換性を破る変更

  • OnNavigatedListener の名前が OnDestinationChangedListener に変更されました。b/118670572
  • OnDestinationChangedListener が引数の Bundle も渡すようになりました。aosp/837142
  • app:clearTask 属性と app:launchDocument 属性、またそれらに関連するメソッドが削除されました。バックスタックからすべての宛先を削除するには、app:popUpTo にグラフのルートを指定して使用してください。 b/119628354
  • ActivityNavigator.ExtrasBuilder パターンを使用するようになり、任意の Intent.FLAG_ACTIVITY_ フラグを設定する機能が追加されました。aosp/828140
  • NavController.onHandleDeepLink の名前が handleDeepLink に変更されました。aosp/836063
  • サブクラス化に向いていない各種のクラスとメソッド(NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration など)が final に設定されました。aosp/835681
  • サポートが終了した NavHostFragment.setGraph() メソッドが削除されました。aosp/835684
  • サポートが終了した NavigationUI.navigateUp(DrawerLayout, NavController) メソッドが削除されました。 aosp/835684
  • フラグメント作成機能が FragmentNavigator に移動され、フラグメントの作成を簡単に FragmentFactory にデリゲートできるようになりました。 b/119054429
  • NavGraphNavigator のコンストラクタが Context を取得しなくなりました。aosp/835340
  • NavigatorProvider がインターフェースではなくクラスになりました。getNavigatorProvider() から返される NavigatorProvider の機能は変更されていません。aosp/830660
  • NavDestination.navigate() が削除されました。navigate()Navigator で呼び出すようになりました。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 の変更

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

バグの修正

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

Safe Args

  • ナビゲーション先の Directions クラスによってその親の Directions クラス(存在する場合)が拡張されるようになりました。b/79871405
  • Directions クラスと Args クラスに、便利な toString() の実装が追加されました。b/111843389

バージョン 1.0.0-alpha05

2018 年 8 月 10 日

バグの修正

  • 不正なバックスタック動作を引き起こすバグを修正しました。b/111907708
  • Generated Args クラスの equals() のバグを修正しました。b/111450897
  • Safe Args のビルドエラーを修正しました。b/109409713
  • リソース ID から Java 名への変換を修正しました。b/111602491
  • Safe Args プラグインの null 可能性に関するエラー メッセージを修正しました。
  • 不足している null 可能性アノテーションを追加しました。

バージョン 1.0.0-alpha04

2018 年 7 月 19 日

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

API / 動作の変更

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

Safe Args

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

バグの修正

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

バージョン 1.0.0-alpha03

2018 年 7 月 12 日

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

API / 動作の変更

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

Safe Args

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

バグの修正

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

バージョン 1.0.0-alpha02

2018 年 6 月 7 日

動作の変更

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

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

バグの修正

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

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

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

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

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

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

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

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

API の変更

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

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

バージョン 1.0.0-alpha01

2018 年 5 月 8 日

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