Fragment

アクティビティ内でホストされる複数の独立した画面にアプリを分割します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 5 月 1 日 1.7.0 - - 1.8.0-alpha02

依存関係の宣言

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

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

Groovy

dependencies {
    def fragment_version = "1.7.0"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.7.0"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

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

フィードバック

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

新しい問題を報告する

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

バージョン 1.8

バージョン 1.8.0-alpha02

2024 年 4 月 17 日

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

バグの修正

  • Fragment 1.7.0-rc02 以降: 他の遷移なしで sharedElement の設定が実行に失敗する理由を示すログを追加しました。(Iec48e
  • Fragment 1.7.0-rc02 以降: 他のすべての遷移がシーク可能なトランザクションにシーク不可の共有要素を追加するとクラッシュが発生するバグを修正しました。これで、トランザクションは正しくシーク不可と見なされます。(I18ccd

バージョン 1.8.0-alpha01

2024 年 4 月 3 日

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

新機能

  • 新しい AndroidFragment Composable を使用すると、フラグメント クラス名を使用してフラグメントを Compose 階層に追加できます。Fragment の状態の保存と復元を自動的に処理します。これは、AndroidViewBinding Composable を直接置き換えることができます。(b/312895363Icf841

ドキュメントの変更

  • OnBackStackChangedListener API のドキュメントを更新し、呼び出されるタイミングとその使用方法を明記しました。(I0bfd9

依存関係の更新

バージョン 1.7

バージョン 1.7.0

2024 年 5 月 1 日

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

予測型「戻る」ジェスチャーのサポート

  • Fragment は、Animator を使用している場合、または AndroidX Transition 1.5.0 を使用している場合に、予測アプリ内「戻る」をサポートするようになりました。これにより、ユーザーは「戻る」ジェスチャーを使用して Animator または Transition を探すことで、「戻る」ジェスチャーを使用して前のフラグメントを表示できます。その後、操作の完了またはキャンセルのいずれかでトランザクションを commit するかを決定します。
移行システム XML リソース 予測型「戻る」をサポート
Animation R.anim なし
Animator R.animator
フレームワーク Transition R.transition なし
Transition 1.4.1 以前の AndroidX Transition R.transition なし
Transition 1.5.0 を適用した AndroidX Transition R.transition

予測型「戻る」ジェスチャーをオプトインした後に、Fragment で予測型「戻る」サポートの問題が発生した場合は、問題を再現するサンプル プロジェクトで Fragment に対して問題を報告してください。予測型「戻る」を無効にするには、アクティビティの onCreate()FragmentManager.enabledPredictiveBack(false) を使用します。

FragmentManager.OnBackStackChangedListener() は、予測型「戻る」イベントとキャンセルされたイベントをそれぞれ受け取るための onBackStackChangeProgressed()onBackStackChangeCancelled() を提供するようになりました。

フラグメント Compose アーティファクト

Fragment ベースのアーキテクチャから完全な Compose ベースのアーキテクチャに移行するプロセス中のアプリのサポートに重点を置いた、新しい fragment-compose アーティファクトが作成されました。

この新しいアーティファクトで利用できる最初の機能は、Fragmentcontent 拡張メソッドです。これは、ComposeView を作成して適切な ViewCompositionStrategy を設定することで、個々の Fragment の UI に Compose を簡単に使用できるようにすることを目的としています。

  class ExampleFragment : Fragment() {

      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()

          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }

バージョン 1.7.0-rc02

2024 年 4 月 17 日

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

バグの修正

  • 他の遷移なしで sharedElement の設定が実行に失敗する理由を示すログを追加しました。(Iec48e
  • 他のすべての遷移がシーク可能なトランザクションにシーク不可の共有要素を追加するとクラッシュが発生するバグを修正しました。これで、トランザクションは正しくシーク不可と見なされます。(I18ccd

バージョン 1.7.0-rc01

2024 年 4 月 3 日

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

依存関係の更新

バージョン 1.7.0-beta01

2024 年 3 月 20 日

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

API の変更

  • FragmentHostCallback が Kotlin で記述されるようになりました。これにより、Host の汎用型の null 可能性は onGetHost() の戻り値の型の null 可能性と一致します。(I40af5

バグの修正

  • コンテナ内にないフラグメントに対して予測型「戻る」ジェスチャーを commit すると、そのフラグメントは破棄されない問題を修正しました。Fragment はすぐに最終状態に移行します。(Ida0d9
  • 予測型「戻る」ジェスチャーで受信遷移を中断すると、開始ビューが破棄され、画面が空白になる Fragment の問題を修正しました。(Id3f22b/319531491

バージョン 1.7.0-alpha10

2024 年 2 月 7 日

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

バグの修正

  • Animator または AndroidX 遷移に対する Fragment の予測型「戻る」サポートを使用すると、addOnBackStackChangedListener を介して FragmentManager.OnBackStackChangedListener が追加されていない場合に Fragment が handleOnBackProgressed から NullPointerException をスローする、以前の Fragment リリースの既知の問題を修正しました。(I7c835

バージョン 1.7.0-alpha09

2024 年 1 月 24 日

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

フラグメント Compose アーティファクト

Fragment ベースのアーキテクチャから完全な Compose ベースのアーキテクチャに移行するプロセス中のアプリのサポートに重点を置いた、新しい fragment-compose アーティファクトが作成されました。

この新しいアーティファクトで利用できる最初の機能は、Fragmentcontent 拡張メソッドです。これは、ComposeView を作成して適切な ViewCompositionStrategy を設定することで、個々の Fragment の UI に Compose を簡単に使用できるようにすることを目的としています。(561cb7b/258046948

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()

        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}

新機能

  • FragmentManager.OnBackStackChangedListener() は、予測型「戻る」イベントとキャンセルされたイベントをそれぞれ受け取るための onBackStackChangeProgressed()onBackStackChangeCancelled() を提供するようになりました。(214b87

既知の問題

  • Animator または AndroidX 遷移に対して Fragment の予測型「戻る」サポートを使用している場合、addOnBackStackChangedListener を介して FragmentManager.OnBackStackChangedListener が追加されていない場合、Fragment は handleOnBackProgressed から NullPointerException をスローします。リスナーを手動で追加することで、クラッシュを回避できます。この問題は、Fragment の次のリリースで修正される予定です。

バージョン 1.7.0-alpha08

2024 年 1 月 10 日

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

クリーンアップ

バージョン 1.7.0-alpha07

2023 年 11 月 29 日

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

バグの修正

  • 共有要素遷移を設定したときに Enter/exitTransition も設定できなかったことで発生する NullPointerException を修正しました。(I8472b
  • Fragment 1.6.2 以降: FragmentContainerView の Fragment がインフレートされると、FragmentManager、Host、id などの状態に onInflate コールバックでアクセスできるようになりました。(I1e44cb/307427423
  • Fragment 1.6.2 以降: clearBackStack を使用してフラグメントのセットを削除する場合、親フラグメントの ViewModels がクリアされると、ネストされた Fragment の ViewModel がクリアされるようになりました。(I6d83cb/296173018

バージョン 1.7.0-alpha06

2023 年 10 月 4 日

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

依存関係の更新

  • 遷移 1.5.0-alpha04 に追加された新しい animateToStart API に依存するようにフラグメントが更新されました。

バージョン 1.7.0-alpha05

2023 年 9 月 20 日

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

新機能

  • Fragment が、Androidx の遷移を使用する際の予測型「戻る」をサポートするようになりました。これにより、完了した操作でトランザクションを commit するかキャンセルするかを決定する前に、「戻る」ジェスチャーを使用してカスタムの Androidx Transition で前のフラグメントまでシークできます。この機能を有効にするには、Transition 1.5.0-alpha03 リリースに依存する必要があります。(Ib49b4b/285175724

既知の問題

  • 現在、トランジションで「戻る」ジェスチャーを 1 回キャンセルすると、次に「戻る」ジェスチャーを開始したときにトランジションが実行されず、画面が空白になるという問題が発生しています。Transition ライブラリの問題が原因である可能性があります。(b/300157785)この問題が発生した場合は、問題を再現するサンプル プロジェクトを使用して Fragment に問題を提出してください。予測型「戻る」を無効にするには、アクティビティの onCreate()FragmentManager.enabledPredictiveBack(false) を使用します。

バージョン 1.7.0-alpha04

2023 年 9 月 6 日

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

バグの修正

  • 予測型「戻る」ジェスチャーをキャンセルする際にフラグメントが適切なライフサイクル状態にならない問題を修正しました。(I7cffeb/297379023
  • 遷移を使用したアニメーションの実行が許可される回帰を修正しました。(I59f36
  • フラグメントで予測型「戻る」を使用する場合に、バックスタックの 2 番目から最後のフラグメントで 2 回続けて戻るとクラッシュが発生する問題を修正しました。(Ifa1a4

バージョン 1.7.0-alpha03

2023 年 8 月 23 日

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

バグの修正

  • 予測型「戻る」の使用時にフラグメント マネージャーのバックスタック内の最初のフラグメントがスキップされ、3 ボタン ナビゲーションまたは予測型「戻る」ジェスチャーを使用してシステムの「戻る」を使用した場合にアクティビティが終了する問題を修正しました。(I0664bb/295231788

バージョン 1.7.0-alpha02

2023 年 8 月 9 日

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

バグの修正

  • API 34 からの予測型「戻る」ジェスチャーで Fragment を使用している場合、シーク(AnimationsTransitions)をサポートしていない遷移システムを使用している場合や遷移がまったくない場合、Fragment は「戻る」アクションを実行する前にジェスチャーが完了するまで待機するようになりました。(I8100c

バージョン 1.7.0-alpha01

2023 年 6 月 7 日

androidx.fragment:fragment-*:1.7.0-alpha01 がリリースされました。このバージョンは内部ブランチで開発されています。

新機能

  • Fragment が、Animator の使用時に予測型アプリ内に戻る機能をサポートするようになりました。これにより、「戻る」ジェスチャーを使用して、完了したジェスチャーでトランザクションを commit するかキャンセルするかを決定する前に、カスタム Animator で前のフラグメントを表示できます。試験運用版の enablePredictiveBack() を使用して false を渡すことで、この新しい動作を無効にすることもできます。

バージョン 1.6

バージョン 1.6.2

2023 年 11 月 1 日

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

バグの修正

  • FragmentContainerView の Fragment がインフレートされると、FragmentManager、Host、id などの状態に onInflate コールバックでアクセスできるようになりました。(I1e44cb/307427423
  • clearBackStack を使用してフラグメントのセットを削除する場合、親フラグメントの ViewModels がクリアされると、ネストされた Fragment の ViewModel もクリアされるようになりました。(I6d83cb/296173018

バージョン 1.6.1

2023 年 7 月 26 日

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

バグの修正

  • フラグメント インスタンスが RESUMED 状態に戻った後でも、アクティビティが停止しているが破棄されていないときに保存された保存済み状態が誤ってキャッシュに保存される問題を修正しました。これにより、複数のバックスタック API を使用してフラグメントを保存および復元する際に、そのフラグメント インスタンスがバックスタック上にあった場合、キャッシュに保存された状態が再利用されます。(I71288b/246289075

依存関係の更新

  • Fragment が Activity 1.7.2 に依存するようになりました。これにより、Kotlin ユーザーが Activity への明示的な依存関係なしで ComponentDialog を拡張できない問題を修正しました。(b/287509323

バージョン 1.6.0

2023 年 6 月 7 日

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

1.5.0 以降の重要な変更

  • Fragment の保存済み状態は、プライベート ライブラリ状態(カスタム Parcelable クラス)とデベロッパーから提供された状態の間で完全に分割され、常に Bundle に保存されるようになり、フラグメントの状態の発生元を正確に判断できるようになりました。
  • FragmentManager.OnBackStackChangedListener インターフェースが拡張され、onBackStackChangeStartedonBackStackChangeCommitted のコールバックが 2 つ追加されました。これらのコールバックは、フラグメントのバックスタックに対して追加または削除される直前と、トランザクションが commit された直後に、各 Fragment で呼び出されます。
  • FragmentStrictMode は、子フラグメントが親のビュー階層内にネストされているが、親の childFragmentManager には追加されていないことを検出する、新しい WrongNestedHierarchyViolation を追加しました。
  • Intent または IntentSender を受け取る Fragment API と FragmentManager API が @NonNull で適切にアノテーションされるようになりました。これにより、null 値を渡したときに、これらのメソッドが呼び出すそれぞれの Android フレームワーク API が常に直ちにクラッシュするのを防ぐことができます。
  • DialogFragment が、requireComponentDialog() API を介して基になる ComponentDialog にアクセスできるようにしました。
  • Fragment が Lifecycle 2.6.1 に依存するようになりました。
  • フラグメントが SavedState 1.2.1 に依存するようになりました。
  • Fragment が ProfileInstaller 1.3.0 に依存するようになりました。
  • fragment-testing-manifest アーティファクトは、マニフェスト エントリを残りのフラグメント テスト コンポーネントから分離します。これにより、以下の処理が可能になります。

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    これにより、fragment-testingandroidx.test の間のバージョン スキューによる競合が回避されます。

バージョン 1.6.0-rc01

2023 年 5 月 10 日

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

バグの修正

  • 複数の startActivityForResult リクエストが連続して行われた場合に、間違ったリクエスト コードで ActivityResult が送信される問題を修正しました。(If0b9db/249519359
  • バックスタックを変更していないトランザクションが混在している場合に、実際にはバックスタックを変更していないトランザクションに対して onBackStackChangeListener コールバックがディスパッチされていた問題を修正しました。(I0eb5cb/279306628

バージョン 1.6.0-beta01

2023 年 4 月 19 日

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

バグの修正

  • タイムアウトを指定して postponeEnterTransition を使用し、延期されたフラグメントを置き換えることで、延期されたフラグメントがリークしなくなりました。(I2ec7db/276375110
  • 新しい onBackStackChangeStarted コールバックと onBackStackChangeCommitted コールバックは、複数のトランザクションに同じフラグメントが含まれている場合でも、フラグメントを 1 回だけディスパッチするようになりました。(Ic6b69

バージョン 1.6.0-alpha09

2023 年 4 月 5 日

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

API の変更

  • DialogFragment が、requireComponentDialog() API を介して基になる ComponentDialog にアクセスできるようにしました。(I022e3b/234274777
  • フラグメントの commitNow()executePendingTransactions()popBackStackImmediate() の API に @MainThread アノテーションが付けられました。つまり、メインスレッドから呼び出されていない場合に、実行時に失敗するのを待たずにビルドエラーをスローするようになりました。(Ic9665b/236538905

バグの修正

  • 同じフレームでの保存と復元がクラッシュを引き起こす可能性がある FragmentManager のバグを修正しました。(Ib36afb/246519668
  • OnBackStackChangedListeneronBackStackChangeStarted コールバックと onBackStackChangeCommitted コールバックは、FragmentManager バックスタックが変更された場合にのみ実行されるようになりました。(I66055b/274788957

バージョン 1.6.0-alpha08

2023 年 3 月 22 日

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

動作の変更

  • OnBackStackChangedListener.onBackStackChangeCommited コールバックのタイミングが、フラグメント オペレーションが実行される前に実行されるように調整されました。これにより、デタッチされたフラグメントがコールバックに渡されなくなります。(I66a76b/273568280

バグの修正

  • Fragment 1.5.6 以降: Lifecycle がすでに STARTED で、結果がすでに利用可能な場合、setFragmentResultListener 内で clearFragmentResultListener を呼び出しても機能しない問題を修正しました。(If7458

依存関係の更新

バージョン 1.6.0-alpha07

2023 年 3 月 8 日

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

バグの修正

  • Fragment 1.5.6 以降: メニュー アイテムが追加されているかどうかにかかわらず、Fragment を削除するとアクティビティのメニューが無効になる問題を修正しました。(50f098b/244336571

バージョン 1.6.0-alpha06

2023 年 2 月 22 日

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

動作の変更

  • フラグメントがターゲット状態に移行し始める前に、FragmentManageronBackStackChangedListener で新しい onBackStackChangedStarted コールバックが実行されるようになりました。(I34726

バージョン 1.6.0-alpha05

2023 年 2 月 8 日

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

新機能

  • FragmentManager.OnBackStackChagnedListener インターフェースで onBackStackChangeStartedonBackStackChangeCommitted の 2 つのコールバックが提供されるようになりました。これにより、FragmentManager でバックスタックの変更が発生するタイミングについて、追加情報と制御が可能になります。(Ib7ce5b/238686802

API の変更

  • Intent または IntentSender を受け取る Fragment API と FragmentManager API に、null 値を渡したときにこれらのメソッドが呼び出す各 Android フレームワーク API が即座にクラッシュする現象を回避するために、@NonNull でアノテーションが正しく付けられるようになりました。(I06fd4

バージョン 1.6.0-alpha04

2022 年 12 月 7 日

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

新機能

  • FragmentStrictMode で新しい WrongNestedHierarchyViolation が追加されました。これは、子フラグメントが親のビュー階層内にネストされているのに、親の childFragmentManager には追加されていないことを検出するものです。(I72521b/249299268

動作の変更

  • Fragment は、onAttach() の前に SavedStateRegistry 状態を復元し、上位のすべてのライフサイクル メソッドから使用できるようにします。(I1e2b1

API の変更

  • fragment-testing-manifest アーティファクトは、マニフェスト エントリを残りのフラグメント テスト コンポーネントから分離します。これにより、以下の処理が可能になります。
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

この結果、fragment-testingandroidx.test の間のバージョン スキューによる競合が回避されます。(I8e534b/128612536

バグの修正

  • Fragment 1.5.5 以降: Fragment は、ViewModel 状態をビュー レジストリの保存済み状態の一部として誤って保存しなくなりました。(I10d2bb/253546214

バージョン 1.6.0-alpha03

2022 年 10 月 5 日

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

API の変更

  • DialogFragment を拡張するクラスが、onDismiss() のオーバーライドで super を呼び出す必要があります。(I14798b/238928865

バグの修正

  • フラグメントが常に適切なコールバックを取得できるように、新しいプロバイダ コールバック インターフェース(OnConfigurationChangedProviderOnMultiWindowModeChangedProviderOnTrimMemoryProviderOnPictureInPictureModeChangedProvider)の統合に起因する回帰を修正しました。(I9b380I34581、(I8dfe6b/242570955)、If9d6bId0096I690b3I2cba2

バージョン 1.6.0-alpha02

2022 年 8 月 24 日

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

バグの修正

  • Fragment 1.5.2 以降: popBackStack()replace() のトランザクションを同時に実行すると、フラグメントが終了する際に誤った Animation / Animator が実行されることがある問題を修正しました。(Ib1c07b/214835303

バージョン 1.6.0-alpha01

2022 年 7 月 27 日

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

動作の変更

  • Fragment の保存済み状態は、プライベート ライブラリの状態(カスタム Parcelable クラス)と、デベロッパーが指定する状態に完全に分割され、常に Bundle に保存されるようになりました。これにより、フラグメントの状態の発生源を正確に特定できます。(b/207158202

バグの修正

  • Fragment 1.5.1 以降: AGP 7.4 にバンドルされた lint バージョンを使用すると lint がクラッシュする DialogFragmentCallbacksDetector の回帰を修正しました。(b/237567009

依存関係の更新

バージョン 1.5

バージョン 1.5.7

2023 年 4 月 19 日

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

バグの修正

  • タイムアウトを指定して postponeEnterTransition を使用し、延期されたフラグメントを置き換えることで、延期されたフラグメントがリークしなくなりました。(I2ec7db/276375110

バージョン 1.5.6

2023 年 3 月 22 日

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

バグの修正

  • メニュー アイテムが追加されているかどうかにかかわらず、Fragment を削除するとアクティビティのメニューが無効になる問題を修正しました。(50f098b/244336571
  • Lifecycle がすでに STARTED で、結果がすでに利用可能な場合、setFragmentResultListener 内で clearFragmentResultListener を呼び出しても機能しない問題を修正しました。(If7458

バージョン 1.5.5

2022 年 12 月 7 日

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

バグの修正

  • Fragment は、ViewModel 状態をビュー レジストリの保存済み状態の一部として誤って保存しなくなりました。(I10d2bb/253546214

バージョン 1.5.4

2022 年 10 月 24 日

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

バグの修正

  • プロバイダ コールバック インターフェース(OnConfigurationChangedProviderOnMultiWindowModeChangedProviderOnTrimMemoryProviderOnPictureInPictureModeChangedProvider)を実装していないホストでカスタム FragmentController を使用し、子フラグメントにディスパッチできない非推奨のディスパッチ関数を呼び出すエラーを修正しました。(I9b380

バージョン 1.5.3

2022 年 9 月 21 日

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

バグの修正

  • バックスタック上のフラグメントが onMultiWindowModeChanged()onPictureInPictureModeChanged()onLowMemory()onConfigurationChanged() のコールバックを取得する原因となっていたエラーを修正しました。(I34581I8dfe6b/242570955
  • ネストされた子フラグメントが onMultiWindowModeChanged()onPictureInPictureModeChanged()onLowMemory()onConfigurationChanged() の複数のコールバックを受け取ることはなくなります。(I690b3Id0096If9d6bI2cba2

バージョン 1.5.2

2022 年 8 月 10 日

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

バグの修正

  • popBackStack()replace() のトランザクションを同時に実行すると、フラグメントが終了する際に誤った Animation/Animator が実行されることがある問題を修正しました。(Ib1c07b/214835303

バージョン 1.5.1

2022 年 7 月 27 日

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

バグの修正

  • AGP 7.4 にバンドルされた lint バージョンを使用すると lint がクラッシュする DialogFragmentCallbacksDetector の回帰を修正しました。(b/237567009

依存関係の更新

バージョン 1.5.0

2022 年 6 月 29 日

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

1.4.0 以降の重要な変更

  • CreationExtras の統合 - FragmentLifecycle 2.5.0CreationExtras を介して、ステートレスの ViewModelProvider.Factory を提供できるようになりました。
  • Component Dialog の統合 - DialogFragmentActivity 1.5.0 を介して、onCreateDialog() によって返されるデフォルトのダイアログとして ComponentDialog を使用するようになりました。
  • 保存済みインスタンスの状態のリファクタリング - フラグメントでインスタンスの状態を保存する方法を順次変更しています。これは、フラグメントに保存されている状態と状態のソースを明確に識別するための取り組みです。現在の変更点は以下のとおりです。
    • FragmentManager で、保存済みインスタンスの状態をカスタム Parcelable に直接ではなく、Bundle に保存できるようになりました。
    • まだ配信されていない Fragment Result APIs を介して設定された結果が、FragmentManager の内部状態とは別に保存されるようになりました。
    • 個々のフラグメントに関連付けられた状態は、FragmentManager の内部状態とは別に保存されるようになりました。これにより、個々のフラグメントに関連付けられた保存済みの状態の量を Fragment のデバッグ ロギングに存在する一意の ID に関連付けることができます。

その他の変更点

  • FragmentStrictMode で、クラス名とともに allowViolation() を使用することで非公開のサードパーティ フラグメントが特定の違反ペナルティを回避できるようになりました。
  • アクティビティの ActionBar にメニューを提供する Fragment API は非推奨になりました。Activity 1.4.0 に追加された MenuHost API と MenuProvider API は、フラグメントが使用できるように、テスト可能で、ライフサイクルに対応可能な同等の API サーフェスを提供します。

バージョン 1.5.0-rc01

2022 年 5 月 11 日

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

保存済みインスタンスの状態のリファクタリング

  • 個々のフラグメントに関連付けられた状態は、FragmentManager の内部状態とは別に保存されるようになりました。これにより、個々のフラグメントに関連付けられた保存済みの状態の量をフラグメントのデバッグ ロギングに存在する一意の ID に関連付けることができます。(a153e0b/207158202

バージョン 1.5.0-beta01

2022 年 4 月 20 日

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

API の変更

  • DialogFragment に、showNow 関数と同等の commitNow を使用する新しい dismissNow メソッドが追加されました。これにより、Dialog がすぐに閉じられることはありません。FragmentManager の状態が同期的に更新されるだけです。(I15c36b/72644830

保存済みインスタンスの状態のリファクタリング

  • FragmentManager で、保存済みインスタンスの状態をカスタム Parcelable に直接ではなく、Bundle に保存できるようになりました。これは、フラグメントによって実際に保存される内容について透明性を高めるための第一歩です。(I93807b/207158202
  • まだ配信されていない Fragment Result API を介して設定された結果が、FragmentManager の内部状態とは別に保存されるようになりました。これにより、保存済みインスタンスの状態の一部として保存される結果について、透明性を高めることができます。(I6ea12b/207158202

バージョン 1.5.0-alpha05

2022 年 4 月 6 日

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

API の変更

バージョン 1.5.0-alpha04

2022 年 3 月 23 日

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

API の変更

  • フラグメントをアクティビティに密結合して単独でテストできなくなるため、アクティビティの ActionBar にメニューを提供するフラグメント API は非推奨になりました。Activity 1.4.0-alpha01 に追加された MenuHost API と MenuProvider API は、フラグメントが使用できるように、テスト可能で、ライフサイクルに対応可能な同等の API サーフェスを提供します。(I50a59I20758

バグの修正

  • SavedStateViewFactory が、SavedStateRegistryOwner で初期化された場合でも CreationExtras を使用できるようになりました。エクストラが指定されている場合、初期化された引数は無視されます。(I6c43bb/224844583

バージョン 1.5.0-alpha03

2022 年 2 月 23 日

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

API の変更

  • CreationExtrasby viewModels() 関数と by activityViewModels() 関数に渡せるようになりました。(Ibefe7b/217601110

動作の変更

  • DialogFragment が、onCreateDialog() によって返されるデフォルトのダイアログとして ComponentDialog を使用するようになりました。(If3784b/217618170

バージョン 1.5.0-alpha02

2022 年 2 月 9 日

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

新機能

  • FragmentStrictMode で、クラス名とともに allowViolation() を使用することで非公開のサードパーティ フラグメントが特定の違反ペナルティを回避できるようになりました。(I8f678

バージョン 1.5.0-alpha01

2022 年 1 月 26 日

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

新機能

バグの修正

  • Fragment 1.4.1 以降: XML から生成されたビュー ID の値が負の場合に、FragmentContainerView が不正状態の例外をスローしなくなりました。(Ic185bb/213086140
  • Fragment 1.4.1 以降: by viewModels() 遅延関数でカスタム ownerProducer ラムダを使用する場合、常にフラグメントの Factory が使用されるのではなく、カスタム ViewModelProvider.Factory が提供されていなければ、そのオーナーの defaultViewModelProviderFactory が使用されるようになりました。(I56170b/214106513
  • FragmentregisterForActivityResult() コールバックから ViewModel に初めてアクセスする際のクラッシュを修正しました。(Iea2b3

バージョン 1.4

バージョン 1.4.1

2022 年 1 月 26 日

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

バグの修正

  • XML から生成されたビュー ID の値が負の場合に、FragmentContainerView が不正状態の例外をスローしなくなりました。(Ic185bb/213086140
  • by viewModels() 遅延関数でカスタム ownerProducer ラムダを使用する場合、常にフラグメントの Factory が使用されるのではなく、カスタム ViewModelProvider.Factory が提供されていなければ、そのオーナーの defaultViewModelProviderFactory が使用されるようになりました。(I56170b/214106513

バージョン 1.4.0

2021 年 11 月 17 日

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

1.3.0 以降の重要な変更

  • FragmentStrictMode API は、依存しているアプリまたはライブラリが非推奨のフラグメント API を呼び出していないことを確認できるランタイム チェック機能を提供します。違反が検出されたときは、ログメッセージを出力するか、独自のカスタム リスナーをトリガーするか、アプリをクラッシュさせるかを選択できます。どのチェックを有効にするか、およびどの「ペナルティ」をトリガーするかを制御する FragmentStrictMode.Policy は、FragmentManager で新しい setStrictModePolicy() メソッドにより設定できます。このポリシーはその FragmentManager に適用され、独自のポリシーを設定していないすべての子フラグメント マネージャーにも推移的に適用されます。フラグメントの StrictMode をご覧ください。
  • FragmentContainerView は、コンテナに最後に追加されたフラグメントを返す getFragment() メソッドを提供するようになりました。このメソッドは findFragmentById() と同じロジックで FragmentContainerView の ID を使用しますが、呼び出しを連鎖させることができます。

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenarioCloseable を実装し、Kotlin の use メソッドまたは try-with-resources で使用できるようになりました。

  • フラグメント遷移でテーマから取得された標準のアクティビティ遷移アニメーションを有効にするかどうかを指定する FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} を追加しました。

  • FragmentManager.enableNewStateManager(boolean) の試験運用版 API が削除され、新しい状態マネージャーのみが使用可能になりました。

複数のバックスタック

FragmentManager は、addToBackStack() を使用したフラグメント トランザクションで構成されるバックスタックを保持します。これにより、フラグメントで状態を保存するメカニズムを使用して、それらのトランザクションをポップして前の状態に戻すことができ、フラグメントが自身の状態を適切に復元できるようになります。

このリリースでは、3 つの新しい FragmentManager API(saveBackStack(String name)restoreBackStack(String name)clearBackStack(String name))によって、このメカニズムを拡張しています。これらの API は、addToBackStack() と同じ name を使用して、FragmentTransaction の状態と、そのトランザクション内で追加されたすべてのフラグメントの状態を保存し、後でそれらのトランザクションと、状態を保持しているそれらのフラグメントを復元できるようにします。これにより、現在のバックスタックを保存し、保存されたバックスタックを復元して、複数のバックスタックを効率的に切り替えられます。

saveBackStack()popBackStack() と同様に動作します。つまり、非同期であり、結果的にすべてのフラグメント トランザクションはその特定の名前に戻され(ポップされ)、追加されたフラグメントはすべて破棄されて削除されます。ただし、次に示す重要な違いがあります。

  • saveBackStack() は常に包括的です。
  • 指定された名前がバックスタックに見つからない場合または null の名前が指定されている場合、popBackStack() はバックスタックのすべてのトランザクションをポップしますが、saveBackStack() は、その null でない正確な名前で addToBackStack() を使用してフラグメント トランザクションを以前に commit したことがなければ、何もしません。
  • トランザクションから追加されたすべてのフラグメントの状態が保存されます。つまり、すべてのフラグメントの View 状態が保存され、すべてのフラグメントの onSaveInstanceState() が呼び出されてその状態が復元され、それらのフラグメントに関連付けられたすべての ViewModel インスタンスが保持されます(それらにおいて onCleared()呼び出されません)。

saveBackStack() で使用可能なフラグメント トランザクションは、次に示す特定の条件を満たす必要があります。

  • すべてのフラグメント トランザクションは、トランザクションを単一のアトミック オペレーションとして復元できるように、setReorderingAllowed(true) を使用する必要があります。
  • 保存されたトランザクションのセットは、保存中のバックスタックにどのような変更が加えられた場合でも後で確実に復元できるように、自己完結型でなければなりません(つまり、トランザクションのセットの外部にあるフラグメントを明示的に参照してはなりません)。
  • バックスタックが保存された後で、保存されているフラグメントへの参照を FragmentManager が返さないようにするため、保存されているフラグメントを保持対象のフラグメントにしたり、子フラグメントの遷移セットに保持対象のフラグメントを含めたりすることはできません。

saveBackStack()restoreBackStack()clearBackStack() と同様に、それぞれ以前に保存されたバックスタックを復元したり、以前に保存されたバックスタックをクリアしたりしますが、どちらも以前に同じ名前で saveBackStack() を呼び出していなければ、何もしません。

詳細については、複数のバックスタック: 詳細をご覧ください。

バージョン 1.4.0-rc01

2021 年 11 月 3 日

androidx.fragment:fragment:1.4.0-rc01 がリリースされました。Fragment 1.4.0-beta01 からの変更はありません。バージョン 1.4.0-rc01 に含まれる commit については、こちらをご覧ください。

バージョン 1.4.0-beta01

2021 年 10 月 27 日

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

バグの修正

  • 親フラグメントは、独自のコールバックを起動する前に、階層全体で onHiddenChanged() をディスパッチするようになりました。(Iedc20b/77504618
  • 開いたキーボードがあるフラグメントからリサイクラー ビューのあるフラグメントに移動すると、キーボードが自動的に閉じるようになりました。(I8b842b/196852211
  • DialogFragment は、show()showNow()、または dismiss() を呼び出すときに作成するすべてのトランザクションに対して setReorderingAllowed(true) を使用するようになりました。(Ie2c14
  • DetachAndAttachFragmentInSameFragmentTransaction という非常に長い lint 警告は DetachAndAttachSameFragment に短縮されました。(e9eca3

バージョン 1.4.0-alpha10

2021 年 9 月 29 日

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

lint

  • DetachAndAttachFragmentInSameFragmentTransaction lint 警告を追加して、同じ FragmentTransaction 内で同じ Fragmentdetach()attach() の両方の呼び出しを検出するようにしました。これらの相補的な動作は、同じトランザクションで実行されると相互にキャンセルされるため、実際にアクションを実行するには、それぞれを別のトランザクションに分割する必要があります。(aosp/1832956b/200867930
  • FragmentAddMenuProvider lint エラーを追加して、MenuHostaddMenuProvider API を使用する際に、フラグメントの Lifecycle を使用せずにフラグメント ビューの Lifecycle を使用するように修正しました。(aosp/1830457b/200326272

ドキュメントの更新情報

  • Activity Result API で処理されるようになった API のサポート終了メッセージ(startActivityForResultstartIntentSenderForResultonActivityResultrequestPermissionsonRequestPermissionsResult)が、すべて詳細に表示されるようになりました。(cce80f
  • onActivityCreated() のサポート終了メッセージ(FragmentDialogFragment の両方)が詳細に表示されるようになりました。(224db4

バージョン 1.4.0-alpha09

2021 年 9 月 15 日

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

新機能

  • clearBackStack(name) を呼び出して、saveBackStack(name) で以前に保存された状態を消去できるようになりました。(I70cd7

API の変更

  • Kotlin で FragmentContainerView クラスが書き換えられ、getFragment 関数が null 可能性を適切に考慮するようになりました。(If694ab/189629145
  • FragmentStrictMode が Kotlin で記述されるようになりました。(I11767b/199183506

バグの修正

  • setReorderingAllowed(true) で追加され、保留中のトランザクションを実行する前にすぐに削除される Fragment の状態が適切にクリーンアップされない問題を修正しました。(I8ccb8

バージョン 1.4.0-alpha08

2021 年 9 月 1 日

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

バグの修正

  • 冗長なかっこをより適切に処理するように UseRequireInsteadOfGet lint チェックを改善しました。(I2d865
  • 追加のエッジケースを処理するように UseGetLayoutInflater lint チェックを改善しました。(Ie5423

バージョン 1.4.0-alpha07

2021 年 8 月 18 日

androidx.fragment:fragment:1.4.0-alpha07androidx.fragment:fragment-ktx:1.4.0-alpha07androidx.fragment:fragment-testing:1.4.0-alpha07 がリリースされました。特筆すべき変更はありません。バージョン 1.4.0-alpha07 に含まれる commit については、こちらをご覧ください

バージョン 1.4.0-alpha06

2021 年 8 月 4 日

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

バグの修正

  • FragmentTransaction の復元中に IllegalStateException として表示される、または表示されるフラグメントの 2 番目のコピーとして表示されるバックスタックをすばやく切り替える際の、複数のバックスタックに関する問題を修正しました。(I9039f
  • FragmentManager が、状態が復元された後でも、以前に saveBackStack() を介して保存された状態のコピーを保持する問題を修正しました。(Ied212
  • show(FragmentTransaction, String) メソッドで DialogFragment が明示的に追加され、状態が保存された後に DialogFragmentdismissAllowingStateLoss() メソッドを呼び出しても、クラッシュしなくなりました。(I84422

バージョン 1.4.0-alpha05

2021 年 7 月 21 日

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

バグの修正

  • Fragment 1.3.6: ルートビューに transitionGroup=”true” が設定されている場合、hide() の使用時に Fragment のビューが GONE に正しく設定されるようになりました。(aosp/1766655b/193603427
  • Fragment 1.3.6: FragmentActivity は、オーバーライドするライフサイクル コールバックでの最初のオペレーションとして、保存済み状態を常にロック解除するようになりました。(I6db7a

依存関係の更新

バージョン 1.4.0-alpha04

2021 年 6 月 30 日

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

API の変更

  • FragmentManager は、内部で SavedStateRegistry を使用して状態を保存するようになりました。FragmentControllersaveAllState() メソッドと restoreSavedState() メソッドのサポートも終了しました。FragmentController を使用して FragmentActivity の外部でフラグメントをホストする場合は、FragmentHostCallbacksSavedStateRegistryOwner を実装する必要があります。(Iba68eb/188734238

バグの修正

  • 複数のバックスタックのサポートの一環としての saveBackStack() の呼び出しが、replace() を使用する FragmentTransaction の実行と同時に行われた際に失敗する問題を修正しました。(I73137
  • 複数のバックスタックのサポートで restoreBackStack() API を使用する際に、複数のトランザクションを含む保存されたバックスタックを手動で復元した後に発生する NullPointerException を修正しました。これにより、setReorderingAllowed(true) が一部のトランザクションについてチェックされない問題も修正されました。(I8c593
  • 以前に保存されたフラグメントが FragmentManager から削除された後も、それらのフラグメントの状態を FragmentManager が引き続き誤って復元し、保存された状態が時間の経過とともに継続的に拡大する問題を修正しました。(I1fb8e

バージョン 1.4.0-alpha03

2021 年 6 月 16 日

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

新機能

  • Fragment の StrictMode Violation クラスをすべて更新し、違反の詳細を説明する詳細なエラー メッセージを追加しました。(b/187871638
    • FragmentTagUsageViolation に、フラグメントが追加されている親コンテナを含む詳細なエラー メッセージが追加されました。(Ic33a7
    • WrongFragmentContainerViolation に、フラグメントが追加されていたコンテナを含む詳細なエラー メッセージが追加されました。(Ib55f8
    • TargetFragmentUsageViolation のユースケース クラスに詳細なエラー メッセージが追加され、違反を引き起こしているフラグメントとその他の関連情報が含まれるようになりました。(Icc6ac
    • RetainInstanceUsageViolation を拡張するクラスに、違反を引き起こしているフラグメントを含む詳細なエラー メッセージが追加されました。(I6bd55
    • FragmentReuseViolation に、フラグメントの前の ID を含む詳細なエラー メッセージが追加されました。(I28ce2
    • SetUserVisibleHintViolation に、ユーザーに表示されるヒントが設定されていた先を含む詳細なエラー メッセージが追加されました。(Ib2d5f

動作の変更

  • FragmentContainerView での fitsSystemWindows の呼び出しの制限を元に戻しました。これによりアプリがクラッシュすることはなくなりました。(6b8dddb/190622202

バグの修正

  • Fragment 1.3.5: aosp/1679887 によって Fragment 1.3.4 に導入された共有要素の遷移での回帰を修正しました。Fragment が遷移グループを正しく処理するようになり(transitionGroup="true" で直接設定するか、transitionName または background で間接的に設定するかのいずれか)、共有要素が IndexOutOfBoundsException をスローすることはなくなりました。(I16484b/188679569b/188969304
  • 削除フラグメントを非表示にしようとしたときに FragmentManager がクラッシュすることはなくなりました。(I573ddb/183634730
  • 最上位変数を評価したときに OnCreateDialogIncorrectCallback lint チェックがクラッシュすることはなくなりました。(0a9efab/189967522

バージョン 1.4.0-alpha02

2021 年 6 月 2 日

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

新機能

  • FragmentManager を介してロギングが有効になっている場合、現在使用されている厳格モードのポリシーに関係なく、FragmentStrictMode が常に違反をログに記録するようになりました。(I02df6b/187872638
  • FragmentStrictMode が、特定の Fragment クラスを厳格モードの Violation から除外できるようになりました。これにより、このクラスがペナルティを迂回できるようになります。(Ib4e5db/184786736

  • FragmentStrictMode Violation クラスが拡張され、各違反に基づいて構造情報が追加されるようになりました。これにより、違反の原因と違反したフラグメントを正確に確認できます(If5118b/187871150)。各 Violation には次のものが含まれます。

    • WrongFragmentContainerViolation に、Fragment の追加が試みられた ViewGroup が含まれるようになりました。(I83c75b/187871150
    • TargetFragmentUsageViolationSetTargetFragmentUsageViolationGetTargetFragmentUsageViolationGetTargetFragmentRequestCodeUsageViolation に拡張され、SetTargetFragmentUsageViolation にターゲット フラグメントとリクエスト コードが含まれるようになりました。(I741b4b/187871150
    • SetUserVisibleHintViolation に、setUserVisibleHint() に渡されたブール値が含まれるようになりました。(I00585b/187871150
    • FragmentTagUsageViolation に、<fragment> タグがフラグメントをインフレートしようとした ViewGroup が含まれるようになりました。(I5dbbcb/187871150
    • FragmentReuseViolation に、違反の原因となった Fragment の前のインスタンスの一意の ID が含まれるようになりました。(I0544db/187871150
    • RetainInstanceUsageViolation は抽象クラスとなり、2 つのサブクラス(SetRetainInstanceUsageViolationGetRetainInstanceUsageViolation)を持つようになりました。これらのサブクラスは、違反の種類に応じて 2 つのケースを表します。(Ic81e5b/187871150

動作の変更

  • プログラムまたは XML で fitsSystemWindow 属性を変更しようとすると、FragmentContainerView が例外をスローするようになりました。インセットは個々のフラグメントのビューによって処理されます。(Ie6651b/187304502

バージョン 1.4.0-alpha01

2021 年 5 月 18 日

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

新機能

  • FragmentContainerView は、コンテナに最後に追加されたフラグメントを返す getFragment() メソッドを提供するようになりました。このメソッドは findFragmentById() と同じロジックで FragmentContainerView の ID を使用しますが、呼び出しを連鎖させることができます。(Ife17ab/162527857

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • フラグメント遷移でテーマから取得された標準のアクティビティ遷移アニメーションを有効にするかどうかを指定する FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} を追加しました。(I46652

複数のバックスタック

FragmentManager は、addToBackStack() を使用したフラグメント トランザクションで構成されるバックスタックを保持します。これにより、フラグメントで状態を保存するメカニズムを使用して、それらのトランザクションをポップして前の状態に戻すことができ、フラグメントが自身の状態を適切に復元できるようになります。

このリリースでは、2 つの新しい FragmentManager API(saveBackStack(String name)restoreBackStack(String name))によって、このメカニズムを拡張しています。これらの API は、addToBackStack() と同じ name を使用して、FragmentTransaction の状態と、そのトランザクション内で追加されたすべてのフラグメントの状態を保存し、後でそれらのトランザクションと、状態を保持しているそれらのフラグメントを復元できるようにします。これにより、現在のバックスタックを保存し、保存されたバックスタックを復元して、複数のバックスタックを効率的に切り替えられます。

saveBackStack()popBackStack() と同様に動作します。つまり、非同期であり、結果的にすべてのフラグメント トランザクションはその特定の名前に戻され(ポップされ)、追加されたフラグメントはすべて破棄されて削除されます。ただし、次に示す重要な違いがあります。

  • saveBackStack() は常に包括的です。
  • 指定された名前がバックスタックに見つからない場合または null の名前が指定されている場合、popBackStack() はバックスタックのすべてのトランザクションをポップしますが、saveBackStack() は、その null でない正確な名前で addToBackStack() を使用してフラグメント トランザクションを以前に commit したことがなければ、何もしません。
  • トランザクションから追加されたすべてのフラグメントの状態が保存されます。つまり、すべてのフラグメントの View 状態が保存され、すべてのフラグメントの onSaveInstanceState() が呼び出されてその状態が復元され、それらのフラグメントに関連付けられたすべての ViewModel インスタンスが保持されます(それらにおいて onCleared()呼び出されません)。

saveBackStack() で使用可能なフラグメント トランザクションは、次に示す特定の条件を満たす必要があります。

  • すべてのフラグメント トランザクションは、トランザクションを単一のアトミック オペレーションとして復元できるように、setReorderingAllowed(true) を使用する必要があります。
  • 保存されたトランザクションのセットは、保存中のバックスタックにどのような変更が加えられた場合でも後で確実に復元できるように、自己完結型でなければなりません(つまり、トランザクションのセットの外部にあるフラグメントを明示的に参照してはなりません)。
  • バックスタックが保存された後で、保存されているフラグメントへの参照を FragmentManager が返さないようにするため、保存されているフラグメントを保持対象のフラグメントにしたり、子フラグメントの遷移セットに保持対象のフラグメントを含めたりすることはできません。

restoreBackStack() は、saveBackStack() と同様に、以前 saveBackStack() を同じ名前で呼び出していなければ、何もしません。(b/80029773

FragmentStrictMode

FragmentStrictMode API は、依存しているアプリまたはライブラリが非推奨のフラグメント API を呼び出していないことを確認できるランタイム チェック機能を提供します。違反が検出されたときは、ログメッセージを出力するか、独自のカスタム リスナーをトリガーするか、アプリをクラッシュさせるかを選択できます。どのチェックを有効にするか、およびどの「ペナルティ」をトリガーするかを制御する FragmentStrictMode.Policy は、FragmentManager で新しい setStrictModePolicy() メソッドにより設定できます。このポリシーはその FragmentManager に適用され、独自のポリシーを設定していないすべての子フラグメント マネージャーにも推移的に適用されます。(#123#131#150b/143774122

  • detectFragmentReuse() は、以前に削除された Fragment インスタンスが FragmentManager に再度追加されているかどうかを検出します。Fragment インスタンスが破棄されて FragmentManager から削除された後で、そのインスタンスへの参照を操作または保持してはなりません。(#142b/153738653
  • detectFragmentTagUsage() は、レイアウト XML 内での <fragment> タグの使用を検出します。レイアウトの一部としてフラグメントをインフレートする場合は、常に FragmentContainerView を使用する必要があります。(#141b/153738235
  • detectWrongFragmentContainer() は、FragmentContainerView ではないコンテナへのフラグメントの追加を検出します。レイアウト内のフラグメントのコンテナとして、常に FragmentContainerView を使用する必要があります。(#146b/181137036
  • detectRetainInstanceUsage() は、非推奨の setRetainInstance() API または getRetainInstance() API の使用を検出します。(#140b/153737954
  • detectSetUserVisibleHint() は、非推奨の setUserVisibleHint() API の使用を検出します。(#136b/153738974
  • detectTargetFragmentUsage() は、非推奨の setTargetFragment() API、getTargetFragment() API、getTargetRequestCode() API の使用を検出します。(#139b/153737745

API の変更

新しい lint チェック

  • DialogFragment 内で LayoutInflater.from(Context) を使用すると、UseGetLayoutInflater lint チェックで警告が表示されるようになりました。LayoutInflater を適切に取得するには、常にダイアログ フラグメントの getLayoutInflater() メソッドを使用する必要があります。(#156b/170781346
  • DialogFragmentonCreateDialog() メソッドで setOnCancelListener または setOnDismissListener を呼び出すと、DialogFragmentCallbacksDetector lint チェックで警告が表示されるようになりました。これらのリスナーは DialogFragment 自体によって所有されており、これらのコールバックを受信するには onCancel()onDismiss() をオーバーライドする必要があります。(#171b/181780047b/187524311

バグの修正

  • Fragment 1.3.4 以降: Fragment 内で ViewModelProvider または viewModel() の Jetpack Compose メソッドとともに ViewTreeViewModelStoreOwner.get() API を使用した場合に Fragment 1.3.3 で発生する回帰を修正しました。このようなユースケースで、getDefaultViewModelProviderFactory() をオーバーライドした場合に Fragment によって提供される ViewModelProvider.Factory を正しく使用できるようになりました(この動作は、Hilt を使用する際の @AndroidEntryPoint アノテーションが付けられた Fragment と同様です)。このメソッドをオーバーライドしない場合、Fragment のビューとともに状態を保存および復元する SavedStateViewModelFactory がデフォルトのファクトリとして作成されます。(I5cbfab/186097368
  • Fragment 1.3.4 以降: API 29 で FragmentContainerView を使用した場合に、インセットが無期限にディスパッチされることがなくなります。これにより、BottomNavigationBar および FloatingActionButton インスタンスに関する問題が解決されます。(I1bb78b/186012452
  • Fragment 1.3.4 以降: プロセスの異常終了後に、フラグメントの結果バンドルから Parcelable を取得できるようになりました。(I65932b/187443158
  • Fragment 1.3.4 以降: ViewGroup で共有要素の遷移を行うときに、ViewGroup で transitionGroup が false に設定されていれば、適切に遷移するようになりました。(I99675

外部からの協力

バージョン 1.3

バージョン 1.3.6

2021 年 7 月 21 日

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

バグの修正

  • Fragment 1.4.0-alpha03: 削除フラグメントを非表示にしようとしたときに FragmentManager がクラッシュすることはなくなりました。(I573ddb/183634730
  • ルートビューで transitionGroup=”true” が設定されている場合、hide() の使用時に Fragment のビューが GONE に正しく設定されるようになりました。(aosp/1766655b/193603427
  • FragmentActivity は、オーバーライドするライフサイクル コールバックでの最初のオペレーションとして、保存済み状態を常にロック解除するようになりました。(I6db7a

依存関係の更新

バージョン 1.3.5

2021 年 6 月 16 日

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

バグの修正

  • aosp/1679887 によって Fragment 1.3.4 に導入された共有要素の遷移での回帰を修正しました。Fragment が遷移グループを正しく処理するようになり(transitionGroup="true" で直接設定するか、transitionName または background で間接的に設定するかのいずれか)、共有要素が IndexOutOfBoundsException をスローすることはなくなりました。(I16484b/188679569b/188969304

バージョン 1.3.4

2021 年 5 月 18 日

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

バグの修正

  • Hilt を使用する際に Fragment 内で ViewModelProvider または viewModel() の Jetpack Compose メソッドとともに ViewTreeViewModelStoreOwner.get() API を使用した場合に Fragment 1.3.3 で発生する回帰を修正しました。このようなユースケースで、getDefaultViewModelProviderFactory() をオーバーライドした場合に Fragment によって提供される ViewModelProvider.Factory を正しく使用できるようになりました(この動作は、@AndroidEntryPoint アノテーションが付けられた Fragment と同様です)。このメソッドをオーバーライドしない場合、Fragment のビューとともに状態を保存および復元する SavedStateViewModelFactory がデフォルトのファクトリとして作成されます。(I5cbfab/186097368
  • API 29 で FragmentContainerView を使用した場合に、インセットが無期限にディスパッチされることがなくなります。これにより、BottomNavigationBar および FloatingActionButton インスタンスに関する問題が解決されます。(I1bb78b/186012452
  • プロセスの異常終了後に、フラグメントの結果バンドルから Parcelable を取得できるようになりました。(I65932b/187443158
  • ViewGroup で共有要素の遷移を行うときに、ViewGroup で transitionGroup が false に設定されていれば、適切に遷移するようになりました。(I99675

バージョン 1.3.3

2021 年 4 月 21 日

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

新機能

  • SavedStateViewModelFactory を、Fragment のビューで ViewTreeSavedStateRegistryOwner.get() を使用して返された SavedStateRegistryOwner とともに使用できるようになりました。(I21acfb/181577191

バグの修正

  • Fragment 1.3.2 で生じる回帰を修正しました。NavHostFragment などが使用する setPrimaryNavFragment オペレーションが含まれる FragmentTransaction をポップすると、popEnter アニメーションが実行されなくなっていました。(I38c87b/183877426
  • FragmentContainerView で、すべての Fragment に新しい WindowInsets のセットがディスパッチされるようになり、各フラグメントがインセットを個別に使用できるようになりました。(I63f68b/172153900
  • カスタム Dialog クラスのコンテナと同じ ID を持つコンテナに子フラグメントが追加された場合でも、DialogFragment が適切に処理されるようになりました。これにより、BottomSheetDialog などのダイアログによって内部で使用される ID の再利用時に生じていたビュー階層の問題が修正されました。(Ie6279b/180021387
  • FragmentManager.dump() が、アクティブなフラグメントのリスト内の最初のフラグメントを適切にインデントするようになりました。(If5c33b/183705451

新しいステート マネージャーのバグの修正

  • フラグメントの新しいステート マネージャーが、hide オペレーションによる終了遷移を適切に処理するようになりました。(I9e4deb/184830265

バージョン 1.3.2

2021 年 3 月 24 日

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

新しいステート マネージャーのバグの修正

  • popBackStack()commit() の両方のオペレーションを同時に実行すると、最後のオペレーションで一部のポップ アニメーションおよび入力アニメーションが実行されるのではなく、すべてのアニメーションの方向が設定されるようになりました。(I7072eb/181142246
  • 共有要素階層内のビューでは、共有要素の遷移を行う際に遷移名がクリアされなくなります。(I4d4a6b/179934757

依存関係の更新

  • Fragment が Activity 1.2.2 に依存するようになりました。Fragment 1.3.1 以上を使用する場合の、Activity の InvalidFragmentVersionForActivityResult lint チェックに関する問題を修正しました。
  • Fragment が Lifecycle 2.3.1 に依存するようになりました。

バージョン 1.3.1

2021 年 3 月 10 日

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

新機能

  • DialogFragment 内のダイアログが DecorView を介して ViewTree オーナーにアクセスできるようになり、ComposeViewDialogFragment を使用できるようになりました。(Ib9290b/180691023

バグの修正

  • FragmentContainerView を使用してすでに RESUMED 状態のアクティビティにインフレートされたフラグメントが、構成の変更後に適切に表示されるようになりました。(Ie14c8b/180538371
  • フラグメント toString() の末尾に余分な } がなくなりました(I54705b/177761088
  • FragmentActivity のオーバーライド済みメソッドが、基本メソッド javaDoc を適切に継承するようになりました(I736ceb/139548782
  • setFragmentResultsetFragmentResultListener のドキュメントのパラメータ ドキュメントが更新され、null 許容を受け取らなくなったことが反映されました(I990bab/178348386

新しいステート マネージャーのバグの修正

  • mFocusedView によって生じるフラグメントでのメモリリークを修正しました(Ib4e9eb/179925887
  • トランザクションの表示 / 非表示を使用したときに、フラグメントが onCreateOptionsMenu を適切に呼び出すようになりました(I8bce8b/180255554
  • フラグメントが配置される前に遷移し始める子フラグメントが、適切に RESUMED 状態に移行するようになりました(Ic11e6b/180825150
  • <fragment> タグを使用してインフレートされたフラグメントが、常に RESUMED 状態に移行するようになりました(I452acI9fa49

依存関係の更新

バージョン 1.3.0

2021 年 2 月 10 日

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

1.2.0 以降の主な変更

  • 新しいステート マネージャー: FragmentManager の大幅な内部の書き換えにより、ライフサイクル イベント、アニメーション、遷移のディスパッチ、延期されたフラグメントの処理方法に関するさまざまな問題が修正されました。
  • Activity Result API の統合: Activity 1.2.0 に導入された ActivityResultRegistry API に対するサポートを追加しました。これにより、startActivityForResult() + onActivityResult()requestPermissions() + onRequestPermissionsResult() のフローを処理する際に Fragment でメソッドをオーバーライドする必要がなくなり、これらのフローをテストするためのフックを提供できるようになります。更新されたアクティビティからの結果の取得をご覧ください。

    • このリリースでは、無効なリクエスト コードと、以前のバージョンの FragmentActivity で Activity Result API の動作を妨げる権限リクエストのディスパッチに関する多くの問題が修正されました。FragmentActivity または AppCompatActivity で Activity Result API を使用するには、Fragment 1.3.0 にアップグレードする必要があります。
  • Fragment Result API: FragmentManager の新しい API を介して 2 つの Fragment 間で結果を受け渡すためのサポートを追加しました。これは、階層フラグメント(親 / 子)、DialogFragment、ナビゲーションのフラグメントに対して機能します。また、少なくとも STARTED の間の結果は、自分のフラグメントのみに送信されます。これらの新しい API を優先して、ターゲット フラグメント API のサポートが終了しました。Fragment Result API を使用して結果を取得するをご覧ください。

  • FragmentOnAttachListener: FragmentActivityFragmentonAttachFragment() コールバックのサポートが終了しました。より柔軟な代替手段を提供するために、新しく FragmentOnAttachListener が追加されました。これにより、onAttachFragment() を個別のテスト可能なリスナーにデリゲートしたり、直接の子 FragmentManager 以外の FragmentManager にリスナーを追加したりできるようになりました。

  • FragmentScenario の改善: fragment-testing アーティファクトの FragmentScenario クラスが Kotlin に書き換えられ、さまざまな改善が行われました。

    • FragmentScenariosetMaxLifecycle() を使用して moveToState() を実装することにより、すべての API レベルで一貫した動作を保証し、Fragment の状態を基になる Activity から分離するようになりました。
    • FragmentScenario は初期の Lifecycle.State を設定できるようになり、各 Lifecycle.State に初めて移行する前にフラグメントの状態のアサーションを行えるようになりました。
    • onFragmentFragmentScenario API の代替機能を Kotlin で具体化された拡張メソッド withFragment(値を返すことができます)の形式で追加しました。指定されたブロックで発生した例外を再スローする点が特に重要です。
  • ViewTree のサポート: Lifecycle 2.3.0SavedState 1.1.0 に追加された ViewTreeLifecycleOwner.get(View)ViewTreeViewModelStoreOwner.get(View)ViewTreeSavedStateRegistryOwner API に対するサポートを Fragment に追加し、Fragment 内で View を使用する際に、ViewModelStoreOwner として、またはフラグメントのビュー Lifecycle に関連付けられた SavedStateRegistryOwnerLifecycleOwner として Fragment を返すようになりました。

  • TRANSIT_ アニメーションの変更: フラグメントのデフォルトのエフェクト(TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE)は、Animation の代わりに Animator を使用するようになりました。これらのアニメーターのビルドに使用するリソースは非公開になりました。

  • setRetainInstance() のサポート終了: Fragment の setRetainInstance() メソッドのサポートが終了しました。ViewModels の導入により、デベロッパーは、アクティビティ、フラグメント、ナビゲーションのグラフに関連付けることができる状態を保持するための特定の API を使用できるようになりました。これにより、デベロッパーは漏洩の一般的な原因を回避しつつ、保持された状態(つまり、ViewModel のコンストラクタとそれが受け取る onCleared() コールバック)の単一の作成と破棄の有用なプロパティを維持する一方、通常の保持されないフラグメントを使用し、保持する必要がある特定の状態を個別に保持できます。

  • ViewPager 1 アダプターのサポート終了: ViewPager2 1.0.0 のリリースに伴い、ViewPager とやり取りするための FragmentPagerAdapter クラスと FragmentStatePagerAdapter クラスのサポートが終了しました。ViewPager から ViewPager2 に移行するをご覧ください。

バージョン 1.3.0-rc02

2021 年 1 月 27 日

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

バグの修正

  • 構成の変更後、親 DialogFragment が子 DialogFragment の上に表示される問題を修正しました。これにより、子ダイアログ フラグメントが常に親ダイアログ フラグメントの上に表示されるようになりました。(I30806b/177439520
  • Animation を使用して hide オペレーションを行うと、非表示フラグメントがアニメーションの終了時に点滅する問題を修正しました。(I57e22b/175417675
  • ビュー階層が追加される前に遷移が追加されたフラグメントが、適切に RESUMED 状態に移行するようになりました。(I1fc1db/177154873

新しいステート マネージャーのバグの修正

  • Fragment のビュー LifecycleCREATED 状態に移行する前に Fragment のビューが破棄された場合に、Lifecycle が適切に処理されるようになりました。これにより、「INITIALIZED からのイベントはありません」という例外を回避できます。(eda2bdb/176138645
  • Animator を使用する Fragment が、FragmentContainerView の使用時に正しい順序で表示されるようになりました。(Id9aa3b/176089197

バージョン 1.3.0-rc01

2020 年 12 月 16 日

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

バグの修正

  • onPrepareOptionsMenu()onCreateOptionsMenu() と同じロジックに従うようになり、親フラグメントが setMenuVisibility(false) を呼び出したときに呼び出されなくなりました。(Id7de8b/173203654

新しいステート マネージャーのバグの修正

  • Animation を含むフラグメントを FragmentContainerView に追加してからポップ オペレーションでその追加を中断した場合のリークと視覚的アーティファクトを修正しました。(I952d8
  • onCreate() メソッドまたは onViewCreated() メソッドでフラグメントが置き換えられた場合に、フラグメントのビューがビュー階層に残る問題を修正しました。(I8a7d5
  • Fragment のルートビューが再開されたときに、フォーカスが適切に復元されるようになりました。(Ifc84b
  • 同じフラグメント トランザクションでポップ オペレーションと置換オペレーションを組み合わせた場合に、適切なアニメーションが表示されるようになりました。(Ifd4e4b/170328691

バージョン 1.3.0-beta02

2020 年 12 月 2 日

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

新機能

  • FragmentScenario が Kotlin に完全に変換されました。ソースとバイナリの互換性は、FragmentAction に対する Kotlin 1.4 の機能インターフェースを使用することで維持されます。(I19d31

動作の変更

  • class または android:name 属性を使用してフラグメントをインフレートしない FragmentContainerView を FragmentActivity の外部で使用できるようになりました。(Id4397b/172266337
  • フラグメントの最大ライフサイクルを DESTROYED に設定しようとすると、IllegalArgumentException がスローされるようになりました。(Ie7651b/170765622
  • DESTROYED 状態で FragmentScenario を初期化すると IllegalArgumentException がスローされるようになりました。(I73590b/170765622

新しいステート マネージャーのバグの修正

  • Animator またはいずれかの TRANSIT_FRAGMENT_ オプションを使用しているフラグメント遷移を中断した場合に、ビューが最終状態に到達しない問題を修正しました。(I92426b/169874632
  • exit する Animation を含むフラグメントが適切に破棄されない問題を修正しました。(I83d65
  • エフェクトが元に戻されたフラグメントを exit した場合に、フラグメントが適切にキャンセルされて適切な enter エフェクトで再開されるようになりました。(I62226b/167092035
  • hide() の exit Animator が実行されない問題を修正しました。(Id7ffe
  • フラグメントを延期してすぐに開始した場合に、適切に表示されるようになりました。(Ie713bb/170022857
  • アニメーション中にフォーカスされているビューを削除するフラグメントが RESUMED になったとき、デタッチされたビューにフォーカスを復元しようとしなくなりました。(I38c65b/172925703

外部からの協力

  • FragmentFactory が、異なる ClassLoader インスタンスのフラグメント クラスを個別にキャッシュに保存するようになりました。Simon Schiller 氏に感謝いたします。(#87b/113886460

バージョン 1.3.0-beta01

2020 年 10 月 1 日

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

新機能

  • setMaxLifecycle() は、フラグメントが CREATED に移行していない限り、Lifecycle 状態を INITIALIZING に設定できるようになりました。(b/159662173

API の変更

動作の変更

  • フラグメントのリソース ファイルが正常に非公開になりました。(aosp/1425237

バグの修正

  • <fragment> タグを使用してインフレートされたフラグメントは、ビューがコンテナに追加されてから STARTED に移行するまで適切に待機するようになりました。(I02f4c
  • フラグメントが表示され、setMaxLifecycle() から CREATED に変わると、exit エフェクトを適切に実行するようになりました。(b/165822335
  • バックスタックに追加されていないデタッチされたフラグメントを削除しても、メモリリークが発生しなくなりました。(Nicklas Ansman Giertz 氏ご提供)(b/166489383
  • アクティブなフラグメントは常に null 以外の FragmentManager を持ち、null 以外の FragmentManager を持つフラグメントは常にアクティブと見なされるようになります。(aosp/1422346
  • フラグメントのデフォルトのエフェクト(TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE)では、Animation の代わりに Animator が使用されるようになりました。(b/166155034

新しいステート マネージャーのバグの修正

  • フラグメントは、アニメーションを開始する直前に、ビュー フォーカス状態を適切に復元するようになりました。(Icc256
  • 共有要素の遷移のみを持つフラグメントは、特殊エフェクトを正しく処理するようになりました。つまり、実際には最終状態に移行するようになります。(Iaebc7b/166658128
  • フラグメント ビューを、破棄される前に常にコンテナから削除するようにしました。(Id5876
  • 新しいステート マネージャーは、enter するフラグメント ビューを追加する前に、exit するフラグメント ビューを常に削除するようになりました。(I41a6e
  • 新しいステート マネージャーは、フラグメント ビューの表示に対する明示的な変更に準拠するようになりました。つまり、アニメーションの開始前に enter するフラグメントのビューを INVISIBLE に設定した場合、実際には表示されないままになっています。(b/164481490
  • フラグメントは Animations よりも Animators を優先します。つまり、両方を持つフラグメントは Animator のみを実行し、Animation を無視します。(b/167579557
  • 新しいステート マネージャーでは、enter するアニメーションを使用しているときにフラグメントがフラッシュすることがなくなりました。(b/163084315

既知の問題

新しいステート マネージャーを使用しているときに、前のフラグメントに戻るのではなく、特殊エフェクトの enter 中に戻るボタンを押すと、以前のフラグメントは追加されることなく画面が真っ白になります。(b/167259187b/167092035b/168442830

バージョン 1.3.0-alpha08

2020 年 8 月 19 日

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

新しいステート マネージャー

このリリースでは、FragmentManager の内部状態管理で大幅なリファクタリングを行っています。これは、ライフサイクル関連のメソッド、アニメーション、遷移のディスパッチ、延期されたトランザクションの処理方法に影響します。これはデフォルトで有効です。詳しくは、Fragments 内部の再構築に関するブログ投稿をご覧ください。(b/139536619b/147749580

  • FragmentManager.enableNewStateManager(boolean) の試験運用版の API を使用すると、FragmentManager が新しいステート マネージャーを使用するかどうかを制御できます。(I7b6ee

以下の問題は、新しいステート マネージャーを使用した場合にのみ解決されます。

  • 新しいフラグメントを開始する前に、replace オペレーションの以前のフラグメントを正しく停止するようになりました。(b/161654580
  • Fragment では、同じフラグメントでアニメーション同士が競合するのを防ぐようになりました。これにより、Animation がすべての Transition エフェクトをオーバーライドする事態と、個々のフラグメントの AnimatorTransition の両方が実行される事態を避けることができます。(b/149569323
  • 最後に enter したフラグメントと最初に exit したフラグメントだけでなく、enter、exit したすべてのフラグメントの enterTransitionexitTranstion が実行されるようになりました。(b/149344150
  • 延期されたフラグメントが CREATED 状態で停止せず、他のフラグメントとともに STARTED に移行するようになりました。(b/129035555
  • 延期され順序変更されたトランザクションと順序変更されていないトランザクションが混在している場合に、FragmentManager がオペレーションを順不同で実行する問題を修正しました。(b/147297731
  • 複数のフラグメントを同時にポップしても、フラグメントの延期時に中途のフラグメントが一時的に表示されることがなくなりました。(b/37140383
  • FragmentManager が、onAttachFragment() コールバック内から findFragmentById() または findFragmentByTag() を呼び出したとき、正しいフラグメントを返すようになりました。(b/153082833
  • 破棄されるフラグメントを置き換えるフラグメントが延期されているときに、Fragments が破棄されるフラグメントの onCreateView() を呼び出さないようになりました。(b/143915710
  • フレームワークの Transition と AndroidX の Transition のインスタンスを組み合わせようとしたときのエラー メッセージに、不正な遷移のフラグメントが記載されるようになりました。(b/155574969

動作の変更

  • フラグメントの onCreate() ライフサイクル メソッドで ActivityResultLauncherlaunch() を呼び出すことができるようになりました。(b/161464278
  • onCreate() の後に registerForActivityResult() を呼び出すと、通知なしに構成変更後の結果提供に失敗するのではなく、それが許可されていないことを示す例外がスローされるようになりました。(b/162255449
  • FragmentActivity は、Activity 1.2.0-alpha08 で導入された OnContextAvailableListener API を使用して、FragmentManager の状態を復元するようになりました。FragmentActivity のサブクラスに追加されたリスナーは、このリスナーの後で実行されます。(I513da

バグの修正

  • startIntentSenderForResult() の使用時に無視されていた ActivityOptions が適用されるようになりました。(b/162247961

既知の問題

  • 新しいステート マネージャーを使用する場合、onViewCreated() より後と onResume() より前にフラグメントのルートビューの可視設定を直接設定すると、ルートビューの表示を制御する FragmentManager が、設定した可視設定をオーバーライドしてしまいます。回避策として、常に hide()show() のオペレーションを使用して、フラグメントの可視設定を変更する必要があります。(b/164481490

バージョン 1.3.0-alpha07

2020 年 7 月 22 日

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

新機能

  • FragmentScenario は、Fragment を常に RESUMED 状態に移行するのではなく、CREATEDSTARTEDRESUMED のいずれかの Lifecycle 初期状態を設定できるようになりました。(b/159662750
  • onFragmentFragmentScenario API の代替機能を Kotlin で具体化された拡張メソッド withFragment(値を返すことができます)の形式で追加しました。指定されたブロックで発生した例外を再スローする点が特に重要です。(b/158697631

動作の変更

  • FragmentScenariosetMaxLifecycle() を使用して moveToState() を実装することにより、すべての API レベルで一貫した動作を保証し、Fragment の状態を基になる Activity から分離するようになりました。(b/156527405
  • ViewTreeSavedStateRegistryOwner によって返される SavedStateRegistryOwner が、フラグメント ビューの Lifecycle に関連付けられるようになりました。これにより、フラグメントのビューと同時に状態を保存して復元できるようになります。(b/158503763

バグの修正

  • フラグメントは、フラグメントのビューがアタッチされるのを待ってから ViewCompat.requestApplyInsets() を呼び出すようになりました。これにより、インセット リクエストがドロップされるケースが回避されます。(b/158095749
  • clearFragmentResultListener の呼び出しで、ライフサイクル オブザーバーが適切にクリアされるようになりました。(b/159274993

バージョン 1.3.0-alpha06

2020 年 6 月 10 日

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

新機能

  • FragmentActivityFragmentonAttachFragment() コールバックのサポートが終了しました。より柔軟な代替手段を提供するために、新しく FragmentOnAttachListener が追加されました。これにより、onAttachFragment() を個別のテスト可能なリスナーにデリゲートしたり、直接の子 FragmentManager 以外の FragmentManager にリスナーを追加したりできるようになりました。(I06d3d

バグの修正

  • 親フラグメントの表示状態が、子フラグメントの前に復元されるようになりました。これにより、DialogFragment が別の DialogFragment を子フラグメントとして表示する場合の構成変更後の表示順序の問題が修正されました。(b/157195715
  • UseRequireInsteadOfGet lint チェックで ?. 演算子と !! 演算子の連鎖使用が正しく処理されない問題を修正しました。(b/157677616

バージョン 1.3.0-alpha05

2020 年 5 月 20 日

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

新機能

API の変更

  • setFragmentResult() API と setFragmentResultListener() API がそれぞれ、非 null の BundleFragmentResultListener を受け取るようになりました。以前に設定された結果またはリスナーを明示的にクリアするには、新しい clearFragmentResult() メソッドと clearFragmentResultListener() メソッドを使用します。(b/155416778
  • ラムダを取る setFragmentResultListener() Kotlin 拡張機能が inline としてマークされるようになりました。(b/155323404

動作の変更

  • 以前サポートが終了した、FragmentstartActivityForResult()startIntentSenderForResult()requestPermissions が、内部的に ActivityResultRegistry を使用するようになりました。このため、これらの API を使用する際はリクエスト コードに下位ビット(0xFFFF)のみを使用するという制限がなくなりました。(b/155518741

ドキュメントの更新情報

  • Fragment(@LayoutRes int) コンストラクタと DialogFragment(@LayoutRes int) コンストラクタに関するドキュメントを拡張し、デフォルトの FragmentFactory を使用している場合はサブクラスの引数なしのコンストラクタから呼び出す必要があることを明確にしました。(b/153042497

バージョン 1.3.0-alpha04

2020 年 4 月 29 日

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

新機能

  • FragmentManager の新しい API を介して 2 つのフラグメント間で結果を受け渡すためのサポートを追加しました。これは、階層フラグメント(親 / 子)、DialogFragment、ナビゲーションのフラグメントに対して機能します。また、少なくとも STARTED の間の結果は、自分のフラグメントのみに送信されます。(b/149787344

API の変更

  • ターゲット Fragment API は非推奨になりました。フラグメント間でデータを受け渡すには、代わりに新しい Fragment Result API を使用する必要があります。(b/149787344
  • フラグメントの startActivityForResult()/onActivityResult() API と requestPermissions()/onRequestPermissionsResult() API は非推奨になりました。Activity Result API を使用してください。(aosp/1290887
  • Activity 1.2.0-alpha04 からの互換性を破る変更: prepareCall() メソッドの名前が registerForActivityResult() に変更されました。(aosp/1278717

バグの修正

  • フラグメントのライフサイクルの動作が反映され、onSaveInstanceState() が呼び出される前にフラグメントの getViewLifecycleOwner() が停止するようになりました。(b/154645875
  • フラグメントで setMenuVisibility(false) を呼び出すと、子フラグメントによって提供されるメニューの表示が正しく変更されるようになりました。(b/153593580
  • FragmentContainerView を使用して DialogFragment のビュー階層にフラグメントを追加する際の illegalStateException を修正しました。(b/154366601
  • アクティビティの外部でフラグメントをホストするときに、フラグメントの getDefaultViewModelProviderFactory() メソッドがクラッシュしなくなりました。(b/153762914

バージョン 1.3.0-alpha03

2020 年 4 月 1 日

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

API の変更

  • FragmentprepareCall メソッドが final になりました。(b/152439361

バグの修正

  • BottomSheetDialogFragment の使用時に Fragment 1.3.0-alpha02 で発生する回帰を修正しました。(b/151652127aosp/1263328aosp/1265163
  • 構成の変更後にフラグメントから prepareCall を使用するとクラッシュする問題を修正しました。(b/152137004
  • setTargetFragment() の使用時に共有要素と終了遷移が無視される問題を修正しました。(b/152023196
  • Fragment 1.2.4 以降: 保持されたフラグメントの難読化を許可するように Fragment ProGuard ルールを更新しました。(b/151605338
  • Fragment 1.2.4 以降: DialogFragment クラスで FragmentLiveDataObserve lint ルールを無効にしました。そのライフサイクルとビューのライフサイクルは常に同期するので、observe の呼び出しに this または viewLifecycleOwner を安全に使用できるようになりました。(b/151765086

依存関係の変更

  • フラグメントが Activity 1.2.0-alpha03 に依存するようになったことで、Activity 1.2.0-alpha02 に導入された Activity Result API が大幅に改善されました。

バージョン 1.3.0-alpha02

2020 年 3 月 18 日

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

新機能

  • Activity 1.2.0-alpha02 に導入された ActivityResultRegistry API に対するサポートを追加しました。これにより、startActivityForResult() + onActivityResult()requestPermissions() + onRequestPermissionsResult() のフローを処理する際にフラグメントでメソッドをオーバーライドする必要がなくなり、これらのフローをテストするためのフックを提供できるようになります。更新されたアクティビティから結果を取得するをご覧ください。(b/125158199

API の変更

  • DialogFragment に、onCreateView() がデフォルトでインフレートするレイアウトを示す @LayoutRes を受け取るコンストラクタを追加しました。(b/150327080
  • onActivityCreated() メソッドは非推奨になりました。フラグメントのビューをタッチするコードは onViewCreated()onActivityCreated() の直前に呼び出される)、他の初期化コードは onCreate() で実行する必要があります。アクティビティの onCreate() が完了した際にコールバックを受け取るには、onAttach() のアクティビティの LifecycleLifeCycleObserver を登録し、onCreate() のコールバックを受け取ったら削除する必要があります。 (b/144309266

バグの修正

  • Fragment 1.2.3: onCreateDialog() 内から getLayoutInflater() を呼び出した際に StackOverflowError が発生する DialogFragment のバグを修正しました。(b/117894767aosp/1258664
  • Fragment 1.2.3: 未使用のフラグメント クラスを削除できるように、フラグメントに含まれる ProGuard ルールの範囲を縮小しました。(b/149665169
  • Fragment 1.2.3 以降: Kotlin プロパティ名をシャドウするローカル変数名を使用した場合の UseRequireInsteadOfGet lint チェックでの誤検出を修正しました。(b/149891163
  • Fragment 1.2.3 以降: レイアウトのプレビューで誤ったコンストラクタを使用しても、FragmentContainerViewUnsupportedOperationException をスローしなくなりました。(b/149707833

既知の問題

  • BottomSheetDialogFragment が画面上でダイアログを正しい位置に配置しなくなりました。(b/151652127

バージョン 1.3.0-alpha01

2020 年 3 月 4 日

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

新機能

  • Lifecycle 2.3.0-alpha01 に追加された ViewTreeLifecycleOwner.get(View) API に対するサポートを追加し、フラグメントの viewLifecycleOwneronCreateView() によって返される任意のビューの LifecycleOwner として返されるようにしました。(aosp/1182955

API の変更

  • フラグメントの setRetainInstance() メソッドのサポートが終了しました。ViewModels の導入により、デベロッパーは、アクティビティ、フラグメント、ナビゲーションのグラフに関連付けることができる状態を保持するための特定の API を使用できるようになりました。これにより、デベロッパーは漏洩の一般的な原因を回避しつつ、保持された状態(つまり、ViewModel のコンストラクタとそれが受け取る onCleared() コールバック)の単一の作成と破棄の有用なプロパティを維持する一方、通常の保持されないフラグメントを使用し、保持する必要がある特定の状態を個別に保持できます。(b/143911815
  • ViewPager2 1.0.0 のリリースに伴い、ViewPager と連携するための FragmentPagerAdapter クラスと FragmentStatePagerAdapter クラスは非推奨になりました。ViewPager から ViewPager2 への移行をご覧ください。(b/145132715

バグの修正

  • Fragment ProGuard ルールで、すべての Fragment インスタンスではなく、使用されるデフォルトのコンストラクタである Fragment のみが正しく保持されるようになり、Fragment 1.2.1 で発生する回帰が修正されました。(b/149665169
  • Fragment 1.2.2 に追加された require___() Lint ルールが、ブロックされた Kotlin プロパティ名(view)と同じ名前を持つローカル変数に対して誤検出しなくなりました。(b/149891163)
  • Android Studio でレイアウト プレビューを使用した場合に、FragmentContainerViewUnsupportedOperationException をスローしなくなりました。(b/149707833
  • 状態が保存された後に追加された保持フラグメントが、構成の変更が行われるたびに再作成、破棄されない問題を修正しました。(b/145832397

バージョン 1.2.5

バージョン 1.2.5

2020 年 6 月 10 日

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

バグの修正

  • フラグメントのライフサイクルの動作が反映され、onSaveInstanceState() が呼び出される前にフラグメントの getViewLifecycleOwner() が停止するようになりました。これは以前に Fragment 1.3.0-alpha04 でリリースされたものです。(b/154645875
  • フラグメントで setMenuVisibility(false) を呼び出すと、子フラグメントによって提供されるメニューの表示が正しく変更されるようになりました。これは以前に Fragment 1.3.0-alpha04 でリリースされたものです。(b/153593580

バージョン 1.2.4

バージョン 1.2.4

2020 年 4 月 1 日

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

バグの修正

  • 保持されたフラグメントの難読化を許可するように Fragment ProGuard ルールを更新しました。(b/151605338
  • ライフサイクルとビューのライフサイクルが常に同期されることで、observe の呼び出しに this または viewLifecycleOwner を安全に使用できるようにするため、DialogFragment クラスの FragmentLiveDataObserve Lint ルールを無効にしました。(b/151765086

バージョン 1.2.3

バージョン 1.2.3

2020 年 3 月 18 日

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

バグの修正

  • onCreateDialog() 内から getLayoutInflater() を呼び出す際に StackOverflowError が発生する DialogFragment のバグを修正しました。(b/117894767aosp/1258665
  • 未使用のフラグメント クラスを削除できるように、フラグメントに含まれる ProGuard ルールの範囲を縮小しました。(b/149665169
  • Kotlin プロパティ名をブロックするローカル変数名を使用したときの UseRequireInsteadOfGet Lint チェックの誤検出を修正しました。(b/149891163
  • レイアウトのプレビューで誤ったコンストラクタを使用しても、FragmentContainerViewUnsupportedOperationException をスローしなくなりました。(b/149707833

バージョン 1.2.2

バージョン 1.2.2

2020 年 2 月 19 日

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

新しい Lint チェック

  • Lint では、viewLifecycleOwnerLifecycleOwner として使用して、onCreateView()onViewCreated()onActivityCreated()OnBackPressedDispatcher に呼び出しを行うことをおすすめします。(b/142117657
  • fragment-testing アーティファクトの使用時に正しい debugImplementation を使用していることを確認する新しい Lint チェックを追加しました。(b/141500106
  • get および require と同等の値を含むすべての Fragment API に対して、checkNotNull(get___())requireNonNull(get___())get___()!! の代わりに関連付けられた require___() メソッドを使用して、より詳細なエラー メッセージを生成することをフラグメントが提案するようになりました。(aosp/1202883

バグの修正

  • フラグメントの ProGuard ファイルを修正して、R8 警告を回避するようにしました(b/148963981
  • observe を使用して observelivedata-ktx 拡張メソッド バージョンを処理する際に、viewLifecycleOwner を使用することを提案する既存の Lint チェックを改善しました。(b/148996309
  • 多くの Lint チェックの書式を修正しました(aosp/1157012

外部寄与

  • Slack に代わり、require___() Lint のチェックに協力してくださった Zac Sweers に感謝します。(aosp/1202883

バージョン 1.2.1

バージョン 1.2.1

2020 年 2 月 5 日

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

バグの修正

  • Class インスタンス(または Kotlin の具体化されたバージョン)を受け取る addreplace メソッドを介して追加されたフラグメントで、デフォルトのコンストラクタが ProGuard によって保持されるようになりました。(b/148181315
  • FragmentStatePagerAdapterFragmentPagerAdapter は、finishUpdate() の実行時に FragmentManager によってスローされた例外をキャッチしなくなりました。(aosp/1208711
  • <fragment> タグによって追加されたフラグメントで FragmentManager.findFragment() が機能しない問題を修正しました。(b/147784323
  • <fragment> タグを使用してインフレートされたフラグメントは、レイアウト内で常に onCreate() の前に onInflate() の呼び出しを受け取るようになりました。(aosp/1215856
  • FragmentManager インスタンスで toString() を呼び出したとき、アクティビティがすでに破棄されている場合に NullPointerException がスローされなくなりました。(b/148189412

依存関係の変更

バージョン 1.2.0

バージョン 1.2.0

2020 年 1 月 22 日

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

1.1.0 以降の重要な変更

  • FragmentContainerView: FragmentContainerView は、動的に追加される Fragment に強く推奨されるコンテナです。FrameLayout または他のレイアウトの使用を置き換えます。<fragment> タグと同じ classandroid:nameandroid:tag(省略可)もサポートしていますが、<fragment> で使用するカスタム コードパスの代わりに通常の FragmentTransaction を使用して、この初期フラグメントを追加します。
  • onDestroyView() のタイミング: Fragment が、アニメーションの終了、フレームワークの遷移の終了、AndroidX の遷移の終了を待ってから(Transition 1.3.0 を使用している場合)、onDestroyView() を呼び出すようになりました。
  • クラスベースの add()replace(): Class<? extends Fragment> とオプションの引数の Bundle を取る FragmentTransaction に、add()replace() の新しいオーバーロードを追加しました。これらのメソッドは FragmentFactory を使用して、追加する Fragment のインスタンスを作成します。具体化された型を使用する Kotlin 拡張機能(つまり fragmentTransaction.replace<YourFragment>(R.id.container))も fragment-ktx に追加されました。
  • Lifecycle ViewModel SavedState の統合: SavedStateViewModelFactory は、Fragment で by viewModels()by activityViewModels()ViewModelProvider コンストラクタ、または ViewModelProviders.of() を使用するときのデフォルト ファクトリになりました。
  • 新しい lint チェック: 新しい lint チェックが追加されました。これにより、onCreateView()onViewCreated()onActivityCreated() から LiveData を監視するときに getViewLifecycleOwner() を使用していることを確認できます。
  • getFragmentManager() のサポートの終了: Fragment の getFragmentManager() メソッドと requireFragmentManager() メソッドのサポートが終了し、単一の getParentFragmentManager() メソッドに置き換えられました。このメソッドは、Fragment が追加された null 以外の FragmentManager を返します(isAdded() を使用して、呼び出しが安全かどうかを判断できます)。
  • FragmentManager.enableDebugLogging() のサポートの終了: 静的 FragmentManager.enableDebugLogging メソッドのサポートが終了しました。FragmentManager はタグ FragmentManagerLog.isLoggable() を遵守するようになり、アプリを再コンパイルせずに DEBUG または VERBOSE のログを有効化できるようになりました。

既知の問題

  • FragmentContainerViewclass または android:name 属性でのみ参照されるフラグメントは、ProGuard によって自動的に保持されないため、フラグメント クラスごとに保持ルールを手動で追加する必要があります。(b/142601969
  • FragmentContainerView とともに XML で class または android:name を使用して NavHostFragment を追加するとき、アクティビティの onCreate()findNavController() を使用できません。(b/142847973

バージョン 1.2.0-rc05

2020 年 1 月 8 日

androidx.fragment:fragment:1.2.0-rc05androidx.fragment:fragment-ktx:1.2.0-rc05androidx.fragment:fragment-testing:1.2.0-rc05 がリリースされました。バージョン 1.2.0-rc05 に含まれる commit については、こちらをご覧ください

バグの修正

  • アクティビティを破棄する際に onViewCreated() が誤って呼び出される原因となっていた、<fragment> タグ使用時の Fragment 1.2.0-rc04 の回帰を修正しました。(b/146290333
  • <fragment> タグで追加した Fragment が、レイアウト内にまれにしか存在しない場合でも(横向きレイアウトのみなど)、非設定が正しくクリアされるようになりました。その結果、こうした Fragment はインスタンス化されるのではなく、レイアウト内にない場合でも正しく CREATED に移動されるようになりました。ただし、ライフサイクル メソッドを介して移動することはありません。(b/145769287

バージョン 1.2.0-rc04

2019 年 12 月 18 日

androidx.fragment:fragment:1.2.0-rc04androidx.fragment:fragment-ktx:1.2.0-rc04androidx.fragment:fragment-testing:1.2.0-rc04 がリリースされました。バージョン 1.2.0-rc04 に含まれる commit については、こちらをご覧ください

バグの修正

  • 表示の問題を回避するために、TRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE のアニメーションを調整しました。(b/145468417

バージョン 1.2.0-rc03

2019 年 12 月 4 日

androidx.fragment:fragment:1.2.0-rc03androidx.fragment:fragment-ktx:1.2.0-rc03androidx.fragment:fragment-testing:1.2.0-rc03 がリリースされました。バージョン 1.2.0-rc03 に含まれる commit については、こちらをご覧ください

バグの修正

  • 終了アニメーション / 遷移の実行中に、削除された Fragment が findFragmentById() / findFragmentByTag() によって返されるという、意図しない動作の変更を修正しました。(b/143982969aosp/1167585
  • 含まれるアクティビティが onSaveInstanceState() を呼び出すとき、子フラグメントが親より前に正しく停止するようになりました。(b/144380645
  • 非表示の Fragment が表示された後にビューが誤って INVISIBLE とされる問題を修正しました。(b/70793925
  • Fragment 共有要素の遷移で、回転、スケーリングなどがされたビューを処理するようになりました。(b/142835261

ドキュメントの更新情報

  • setUserVisibleHint() に関する非推奨のドキュメントを明確化しました。(b/143897055
  • FragmentFactory の設定が子 FragmentManager にも影響することをより明確に示すように、setFragmentFactory()getFragmentFactory() のドキュメントを改善しました。(aosp/1170095

依存関係の変更

  • Fragment が Lifecycle 2.2.0-rc03、Lifecycle ViewModel SavedState 1.0.0-rc03、Activity 1.1.0-rc03 に依存するようになりました。

バージョン 1.2.0-rc02

2019 年 11 月 7 日

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

バグの修正

  • Kotlin の場合、onCreateView()onViewCreated()onActivityCreated()Fragment 1.2.0-rc01 で導入)の LiveData を監視する際に、getViewLifecycleOwner() を使用していた LintFix は、getViewLifecycleOwner() の代わりに Kotlin のプロパティ アクセス構文 viewLifecycleOwner を使用するようになりました。(aosp/1143821

バージョン 1.2.0-rc01

2019 年 10 月 23 日

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

新機能

  • FragmentContainerView で、android:name に加えて、<fragment> タグの機能をミラーリングする class 属性に対応できるようになりました。(b/142722242
  • 新しい Lint チェックが追加されました。これにより、onCreateView()onViewCreated()onActivityCreated() から LiveData を監視するときに getViewLifecycleOwner() を使用していることを確認できます。(b/137122478

バグの修正

  • DialogFragmentonDismiss コールバックと onCancel コールバックは、渡された DialogInterface が null 以外であり、実行時に getDialog() が null 以外を返すことを保証するようになりました。(b/141974033
  • FragmentContainerView には、インフレーションの一部として class または android:name によって定義された Fragment が追加され、直後に findFragmentById()findFragmentByTag() が機能できるようになりました。(b/142520327
  • 保存中の状態に起因する FragmentContainerViewIllegalStateException が修正されました。(b/142580713
  • FragmentContainerView クラスが難読化された場合に FragmentContainerView で発生する UnsupportedOperationException の問題を修正しました。(b/142657034

既知の問題

  • FragmentContainerViewclass または android:name 属性でのみ参照されるフラグメントは、ProGuard によって自動的に保持されないため、フラグメント クラスごとに保持ルールを手動で追加する必要があります。aapt2 でこれが修正されるまで FragmentContainerView に移行することを提案する Lint ルールを無効にしました。(b/142601969

バージョン 1.2.0-beta02

2019 年 10 月 11 日

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

バグの修正

  • フラグメントの onInflate()FragmentContainerView から適切な属性を受けられない問題を修正しました(NavHostFragment などを使用する場合に互換性を破る問題)。(b/142421837

バージョン 1.2.0-beta01

2019 年 10 月 9 日

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

新機能

  • FragmentContainerView には、初期フラグメントを付加するためのサポートが追加されています。このフラグメントには、android:name とオプションの android:tag XML 属性のサポートが追加されています。<fragment> タグとは異なり、FragmentContainerView は内部で通常の FragmentTransaction を使用して初期フラグメントを追加し、FragmentContainerView で他の FragmentTransaction 操作を許可して、レイアウトのビュー バインディングの使用を有効にします。(b/139830628b/141177981
  • フラグメントに Lint 警告が追加され、<fragment>FragmentContainerView に置き換えるための簡単な修正が提示されるようになりました。(b/139830056

バグの修正

  • androidx.transition の使用時の ClassCastException を修正しました。(b/140680619
  • Transition 1.3.0-beta01 を使用している場合、Fragment が、(Fragment 1.2.0-alpha03Fragment 1.2.0-alpha02 でそれぞれ修正されたフレームワーク遷移とアニメーションに加えて)androidx.transition 遷移が終了するまで待ってから onDestroyView() をディスパッチするようになりました。(aosp/1119841
  • Transition 1.3.0-beta01 を使用する場合、Fragment は、同じコンテナで新しい遷移 / アニメーションを開始する前に、androidx.transition 遷移を適切にキャンセルするようになりました。(aosp/1119841
  • FragmentContainerView を使用している場合に、Fragment のルートビューで androidx.transition 遷移を使用したときの API 17 以前の問題を修正しました。(b/140361893
  • fragment-testing アーティファクトは AndroidX Test 1.2.0 に依存するようになり、最新の Espresso 3.2.0 との非互換性が修正されました。(b/139100149
  • FragmentManager 内で Log.w の使用箇所が削除されました。(aosp/1126468

既知の問題

  • フラグメントの onInflate() で、FragmentContainerView から適切な属性を受けられない(NavHostFragment などを使用する場合に互換性を破る問題)(b/142421837

バージョン 1.2.0-alpha04

2019 年 9 月 18 日

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

API の変更

  • FragmentgetFragmentManager() メソッドと requireFragmentManager() メソッドのサポートが終了し、単一の getParentFragmentManager() メソッドに置き換えられました。このメソッドは、Fragment が追加された null 以外の FragmentManager を返します(isAdded() を使用して、呼び出しが安全かどうかを判断できます)。(b/140574496
  • 静的 FragmentManager.enableDebugLogging メソッドのサポートが終了しました。FragmentManager はタグ FragmentManagerLog.isLoggable() を遵守するようになり、アプリを再コンパイルせずに DEBUG または VERBOSE のログを有効化できるようになりました。(aosp/1116591

バグの修正

  • フラグメントが正常に破棄され、他のフラグメントの終了アニメーションが実行されるようになりました。(b/140574199
  • フラグメントにコンテナがない場合にフラグメントが Activity.findViewById() を呼び出す問題を修正しました。(aosp/1116431

バージョン 1.2.0-alpha03

2019 年 9 月 5 日

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

API の変更

  • FragmentContainerViewfinal に変更(b/140133091

バグの修正

  • FragmentContainerView が、バックスタックからフラグメントをポップするときに、描画順序を適切に逆にするようになりました。(b/139104187
  • フラグメントのポップと新しいフラグメントの追加を同時に行うと、誤ったアニメーションが実行される問題を修正しました。(b/111659726
  • フラグメントが、(Fragment 1.2.0-alpha02 で修正されたアニメーションに加えて)遷移が終了するまで待ってから onDestroyView() をディスパッチするようになりました。(b/138741697

バージョン 1.2.0-alpha02

2019 年 8 月 7 日

androidx.fragment:fragment:1.2.0-alpha02androidx.fragment:fragment-ktx:1.2.0-alpha02androidx.fragment:fragment-testing:11.2.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • SavedStateViewModelFactory は、Fragmentby viewModels()by activityViewModels()ViewModelProvider コンストラクタ、または ViewModelProviders.of() を使用するときのデフォルト ファクトリになりました。(b/135716331
  • FragmentTransactionsetTransitionTRANSIT_FRAGMENT_OPENTRANSIT_FRAGMENT_CLOSETRANSIT_FRAGMENT_FADE を使用する場合のデフォルトのアニメーションが、Android 10 デバイスのアクティビティで使用されるアニメーションと一致するように更新されました。(aosp/1012812aosp/1014730

API の変更

  • アニメーションの Z オーダーの問題を修正し、フラグメントにディスパッチするウィンドウ インセットを修正するため、FrameLayout などの使用を置き換えて、動的に追加される Fragment に強く推奨されるコンテナとして FragmentContainerView を導入しました。(b/37036000aosp/985243b/136494650
  • 含まれているフラグメントをフラグメントでインフレートされたビューから取得する、静的な FragmentManager.findFragment(View) メソッドを追加しました。Kotlin 拡張機能は fragment-ktx でも利用できます。(aosp/1090757
  • Class<? extends Fragment> とオプションの引数の Bundle を取る FragmentTransaction に、add()replace() のオーバーロードを追加しました。これらのメソッドは FragmentFactory を使用して、追加する Fragment のインスタンスを作成します。具体化された型を使用する Kotlin 拡張機能(つまり fragmentTransaction.replace<YourFragment>(R.id.container))も fragment-ktx に追加されました。(b/126124987
  • @MainThread アノテーションが Fragment ライフサイクル コールバックに追加されました。(b/127272564
  • FragmentTransactionFragmentManager.BackStackEntry のパンくずリストタイトル関連の API はサービスが終了しました。(b/138252944
  • FragmentTransactionsetTransitionStyle メソッドのサポートが終了しました。(aosp/1011537
  • FragmentManager のメソッドの多くは abstract ではなくなりましたが、FragmentManager 自体は abstract のままです。インスタンス化または拡張を直接しないでください。引き続き getSupportFragmentManager()getChildFragmentManager() などから既存のインスタンスのみを取得する必要があります。

バグの修正

  • Fragment 1.1.0-rc04 から: Fragment は、ポップされた Fragment の延期された遷移を正しくキャンセルするようになりました。(b/138251858
  • Fragment 1.1.0-rc03 から: タイムアウトを複数回設定して postponeEnterTransition() を呼び出しても以前のタイムアウトがキャンセルされない問題を修正しました。(b/137797118
  • Fragment 1.1.0-rc02 から: 現在のアイテムを削除するときに FragmentPagerAdapterFragmentStatePagerAdapter で発生するクラッシュを修正しました。(b/137209870
  • Fragment は、アニメーションが終了するまで待ってから、onDestroyView() をディスパッチするようになりました。(b/136110528
  • 親フラグメントをアニメーション化する際に、子フラグメントとその子孫からのフラグメント アニメーションが適切に処理されるようになりました。(b/116675313
  • 共有要素遷移を使用し、ポップと追加操作を組み合わせる際の NullPointerException を修正しました。(b/120507394
  • Robolectric テストで FragmentPagerAdapterFragmentStatePagerAdapter を使用している場合に発生する IllegalStateException の回避策を追加しました。(b/137201343

バージョン 1.2.0-alpha01

2019 年 7 月 2 日

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

新機能

  • FragmentManager は、Fragment のビューをアタッチした後、onViewCreated() を呼び出す直前に requestApplyInsets() を呼び出すようになりました。これにより、ビューのインセットが常に正しいことが保証されます。(b/135945162

バグの修正

  • replace() の前に setPrimaryNavigationFragment() を使用した FragmentTransaction をポップする場合の NullPointerException を修正しました。(b/134673465

バージョン 1.1.0

バージョン 1.1.0

2019 年 9 月 5 日

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

1.0.0 以降の重要な変更

  • fragment-testing: fragment-testing アーティファクトは、フラグメントを単独でテストするための FragmentScenario クラスを提供します。詳細については、アプリのフラグメントをテストするドキュメントをご覧ください。
  • FragmentFactory: FragmentFactoryFragmentManager に設定してフラグメント インスタンスの作成を管理できるようになり、引数のないコンストラクタを持つという厳格な要件がなくなりました。
  • ViewModels 用 Kotlin プロパティ デリゲート: fragment-ktx アーティファクトに、Kotlin プロパティ デリゲートが 2 つ含まれるようになりました。個々のフラグメントに関連付けられた ViewModels にアクセスするための by viewModels() と、特定のアクティビティを対象にして ViewModels にアクセスする by activityViewModels() です。
  • 最大 Lifecycle: FragmentTransactionsetMaxLifecycle() を呼び出すことで、Fragment の最大 Lifecycle 状態を設定できるようになりました。サポート終了となった setUserVisibleHint() の代替です。FragmentPagerAdapterFragmentStatePagerAdapter には新しいコンストラクタがあり、これで新しい動作に切り替えられます。
  • FragmentActivity LayoutId コンストラクタ: FragmentActivity のサブクラスで、R.layout ID を受け取る FragmentActivity のコンストラクタを必要に応じて呼び出せるようになりました。これにより、onCreate() 内で setContentView() を呼び出す代わりに、コンテンツ ビューとして設定するレイアウトを指定できるようになりました。これは、サブクラスに引数なしのコンストラクタを含めるという要件を変更するものではありません。
  • Fragment LayoutId コンストラクタ: Fragment のサブクラスで、R.layout ID を受け取る Fragment のコンストラクタを必要に応じて呼び出せるようになりました。これにより、onCreateView() をオーバーライドする代わりに、このフラグメントのために使用する必要があるレイアウトを指定できるようになりました。インフレートされたレイアウトは onViewCreated() で構成できます。
  • タイムアウトを伴う延期: タイムアウトを取る、postponeEnterTransition() の新しいオーバーロードが追加されました。

バージョン 1.1.0-rc04

2019 年 8 月 7 日

androidx.fragment:fragment:1.1.0-rc04androidx.fragment:fragment-ktx:1.1.0-rc04androidx.fragment:fragment-testing:1.1.0-rc04 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • Fragment は、Fragment がポップされた際に延期された遷移を正しくキャンセルするようになりました。(b/138251858

バージョン 1.1.0-rc03

2019 年 7 月 19 日

androidx.fragment:fragment:1.1.0-rc03androidx.fragment:fragment-ktx:1.1.0-rc03androidx.fragment:fragment-testing:1.1.0-rc03 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • タイムアウトを複数回使用して postponeEnterTransition() を呼び出しても、以前のタイムアウトがキャンセルされない問題を修正しました。(b/137797118

バージョン 1.1.0-rc02

2019 年 7 月 17 日

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

バグの修正

  • 現在のアイテムを削除するときに FragmentPagerAdapterFragmentStatePagerAdapter で発生するクラッシュを修正しました。(b/137209870

バージョン 1.1.0-rc01

2019 年 7 月 2 日

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

バグの修正

  • 遷移の実行中に show() または hide() オペレーションを使用した場合に、フラグメントの表示が適切に更新されるようになりました。(b/133385058
  • replace() の前に setPrimaryNavigationFragment() を使用した FragmentTransaction をポップする場合の NullPointerException を修正しました。(b/134673465

バージョン 1.1.0-beta01

2019 年 6 月 5 日

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

バグの修正

  • ネストされた Fragment の androidx.lifecycle.Lifecycle コールバック(特に STARTEDRESUMEDPAUSEDSTOPPEDDESTROYED 関連)が適切にネストされるようになりました。(b/133497591
  • Fragment の onCreate() に登録された OnBackPressedCallback インスタンスが、子 FragmentManager よりも適切に優先されるようになりました。(b/133175997
  • 親フラグメントが置き換えられるときに、子フラグメントがアニメーション化されなくなりました。(b/121017790
  • animateLayoutChanges="true" の使用時に Fragment のアニメーションと遷移が無視されるようになりました。これにより、Fragment が適切に破棄されなかった問題が修正されます。(b/116257087

バージョン 1.1.0-alpha09

2019 年 5 月 16 日

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

API の変更

  • メインのナビゲーション フラグメントが変更されたとき、Fragment が新しい onPrimaryNavigationFragmentChanged(boolean) メソッドへのコールバックを受け取るようになりました。aosp/960857

バグの修正

  • 親 Fragment が削除されたとき、子 Fragment によってインフレートされたメニュー項目が正しく削除されるようになりました。b/131581013

バージョン 1.1.0-alpha08

2019 年 5 月 7 日

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

このリリースは、Preferences 1.1.0-alpha01 から 1.1.0-alpha04 と互換性がありません。このバージョンの Fragment を使用する場合は、Preferences 1.1.0-alpha05 にアップグレードしてください。

新機能

  • タイムアウトを取る postponeEnterTransition() の新しいオーバーロードが追加されました。今後 Fragment は自動的に startPostponedEnterTransition() を呼び出します。b/120803208

API の変更

  • 互換性を破る変更: Bundle を受け取っていた、以前サポートが終了した FragmentFactory instantiate メソッドが削除されました。aosp/953856
  • 互換性を破る変更: FragmentPagerAdapterFragmentStatePagerAdapterRESUME_ONLY_CURRENT_FRAGMENT 定数と USE_SET_USER_VISIBLE_HINT 定数の名前を、それぞれ BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENTBEHAVIOR_SET_USER_VISIBLE_HINT に変更しました。aosp/954782

バグの修正

  • setMaxLifecycle() によってライフサイクルを制限されていた Fragment は、最終状態に達する前に再開されなくなりました。b/131557151
  • setMaxLifecycle(Lifecycle.State.CREATED) を使用する場合に、Fragment のビューが適切に破棄されます。aosp/954180

バージョン 1.1.0-alpha07

2019 年 4 月 25 日

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

新機能

  • FragmentTransactionsetMaxLifecycle() を呼び出すことで、Fragment の最大 Lifecycle 状態を設定できるようになりました。サポート終了となった setUserVisibleHint() の代替です。FragmentPagerAdapterFragmentStatePagerAdapter には新しいコンストラクタがあり、これで新しい動作に切り替えられます。(b/129780800

API の変更

  • FragmentScenariomoveToState(STARTED) は、API レベル 24 以上のデバイスでしか呼び出せなくなりました。(b/129880016

動作の変更

  • b/129907905 の結果、ホスティング アクティビティが再作成されたときに、バックスタック上のフラグメントは onCreateView() へのコールバックを受けませんonCreateView() は、フラグメントが表示されたとき(バックスタックがポップされたとき)にのみ呼び出されるようになりました。

バグの修正

  • XML で <fragment> タグを使用する際の問題と、FragmentActivity または AppCompatActivitycontentLayoutId コンストラクタを修正しました。(b/129907905
  • 構成変更後にバックスタック上のフラグメントが少なくとも CREATED に移動されず、ViewModel と子が保持するフラグメントが適切に破棄されない問題を修正しました。(b/129593351
  • インスタンス状態が保存された後に保持されているフラグメントの同期解除によって発生する restoreSaveState のクラッシュを修正しました。(b/130433793)(aosp/947824
  • FragmentManager にバックスタックがある場合、フラグメント ライフサイクルとともに追加された OnBackPressedCallback が呼び出されない問題を修正しました。詳細については、androidx.activity 1.0.0-alpha07 をご覧ください。(aosp/948209
  • Fragment は、アニメーションに LAYER_TYPE_HARDWARE を強制しなくなりました。ハードウェア レイヤ アニメーションが特に必要な場合は、アニメーションの一部として設定してください。(b/129486478

バージョン 1.1.0-alpha06

2019 年 4 月 3 日

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

新機能

  • FragmentManager がスローする例外で、メッセージに Fragment の名前が含まれるようになりました。(b/67759402

API の変更

  • FragmentFragmentActivity に、@LayoutRes int を受け取る 2 つ目のコンストラクタが追加されました。このコンストラクタは、クラスをアノテーションする以前の動作を @ContentView で置き換えます。この方法は、アプリとライブラリの両方のモジュールで機能します。(b/128352521
  • FragmentActivity の onActivityResult()@CallSuper として適切にマークされるようになりました。(b/127971684
  • 引数 Bundle を受け取る FragmentFactory の instantiate メソッドが非推奨になりました。アプリは、Bundle を受け取らない新しい instantiate オーバーロードを使用する必要があります。(b/128836103
  • FragmentScenario メソッドが @StyleRes で適切にアノテーション付けされるようになりました。(aosp/924193
  • FragmentTabHost が非推奨になりました。(b/127971835
  • FragmentActivity の getThemedContext() が削除されました。(aosp/934078

バグの修正

  • 受信 Fragment が画面上で点滅する原因となっていた 1.1.0-alpha05 における回帰を修正しました。(b/129405432
  • POPBackStack+replace+popBackStack の一連のオペレーションの後に、プライマリ ナビゲーション フラグメントが失われる問題を修正しました。(b/124332597
  • Fragment の状態を復元するときに Activity で @ContentView コンストラクタを使用する際の問題を修正しました。(b/127313094
  • 既存のターゲット Fragment を、まだ FragmentManager にアタッチされていない Fragment に置き換える場合の setTargetFragment() のロジックを修正しました。(aosp/932156

バージョン 1.1.0-alpha05

2019 年 3 月 13 日

androidx.fragment:fragment:1.1.0-alpha05androidx.fragment:fragment-ktx:1.1.0-alpha05androidx.fragment:fragment-testing:1.1.0-alpha05 がリリースされました。このバージョンに含まれる commit の完全なリストについては、こちらをご覧ください。

新機能

  • @ContentView アノテーション ルックアップがキャッシュされるようになりました(b/123709449

動作の変更

  • 別の FragmentManager にアタッチされた Fragment で remove()hide()show()detach()setPrimaryNavigationFragment() を呼び出した場合に、エラーが発生せずに失敗するのではなく、IllegalStateException をスローするようになりました。(aosp/904301

バグの修正

  • FragmentActivityonNewIntent@CallSuper で正しくマークされるようになりました。(b/124120586
  • getDialog().dismiss() または getDialog().cancel() の使用時に DialogFragmentonDismiss() が 2 回呼び出されることがある問題を修正しました。(b/126563750

バージョン 1.1.0-alpha04

2019 年 2 月 7 日

androidx.fragment:fragment 1.1.0-alpha04androidx.fragment:fragment-ktx 1.1.0-alpha04androidx.fragment:fragment-testing 1.1.0-alpha04 がリリースされました。

新機能

  • onCreateView() をオーバーライドする代わりに、どのレイアウト XML ファイルを拡張するかを指定できる @ContentView クラス アノテーションのサポートが追加されました。onViewCreated() でビュー関連の処理を行うことをおすすめします。(aosp/837619
  • fragment-testingandroidx.test:core-ktx 1.1.0 安定版に依存するようになりました。(b/121209673
  • openActionBarOverflowOrOptionsMenuFragmentScenario とともに使用して、Fragment がホストするオプション メニューをテストできるようになりました。(b/121126668

API の変更

  • @NonNull Bundle を返す、または IllegalStateException をスローする requireArguments() メソッドを追加しました。(b/121196360
  • getLifecycle()getViewLifecycleOwner()getViewLifecycleOwnerLiveData() をオーバーライドすべきでない、今後のリリースで最終版になるという注記が追加されました。現在このメソッドをオーバーライドしている場合は、機能をリクエストしてください(aosp/880714
  • getViewModelStore() はオーバーライドすべきでない、今後のリリースで最終版になるという注記が追加されました。現在このメソッドをオーバーライドしている場合は、機能をリクエストしてください(aosp/880713
  • Fragment の以前のリリースとのバイナリ互換性に関する問題を修正しました。(aosp/887877)(aosp/889834

バグの修正

  • nullsetTargetFragment() に渡した場合に、ターゲット フラグメントが正しくクリアされます。(aosp/849969
  • onDestroy() 内またはそれ以降にターゲット フラグメントが使用できなくなることがある問題を修正しました。(b/122312935
  • DialogFragment の on 却下() が、onDestroy() の前に呼び出されるようになりました。(aosp/874133)(aosp/890734

バージョン 1.1.0-alpha03

2018 年 12 月 17 日

新機能

  • Fragment が BundleSavedStateRegistryOwner を実装し、新しくリリースされた SavedState ライブラリに依存するようになりました。(aosp/824380
  • 含まれている Activity に関連付けられた ViewModel を取得するために、by activityViewModels Kotlin プロパティのデリゲートが追加されました。(b/119050253
  • by viewModels Kotlin プロパティのデリゲートが拡張されて、ViewModelStoreOwner を取得するためのオプションのラムダ法を使用するようになりました。これにより、親 Fragment または他のカスタム ViewModelStoreOwnerval viewModel: MyViewModel by viewModels(::requireParentFragment) などのコードで渡せるようになりました。(b/119050253

API の変更

  • FragmentScenario で、Theme.AppCompat などのテーマを指定できるようになりました(b/119054431)。これは互換性を破る変更です。
  • @NonNull View を返す、または IllegalStateException をスローする requireView() メソッドを追加しました。(b/120241368
  • @NonNull Fragment を返す、または IllegalStateException をスローする requireParentFragment() メソッドを追加しました。(b/112103783

バグの修正

  • 「IllegalStateException: Failure saving state」を修正しました。b/120814739
  • 保存されたインスタンスの状態から復元される Fragment が、常に null 以外の Bundle を受け取るようになりました。(b/119794496
  • 削除された Fragment が、再度追加された場合に Lifecycle オブジェクトを再利用しなくなりました。(b/118880674

バージョン 1.1.0-alpha02

2018 年 12 月 3 日

新機能

  • FragmentScenario の Kotlin 拡張機能により、FragmentFactory インスタンスを渡す代わりにラムダを使用して Fragment を作成できるようになりました。(aosp/812913

バグの修正

  • バックスタックでネストされた Fragment を使用する場合の IllegalStateException を修正しました。(b/119256498
  • FragmentScenario.recreate()FragmentFactory とともに使用するときのクラッシュを修正しました。(aosp/820540
  • Fragment が削除された後、ターゲット Fragment にアクセスできない問題を修正しました。(aosp/807634

バージョン 1.1.0-alpha01

2018 年 11 月 5 日

これは、androidx.test:core API 上に構築された fragment-testing アーティファクトと FragmentScenario の最初のリリースです。詳細については、フラグメント テストのドキュメントをご覧ください。

新機能

  • フラグメントを単独でテストするための新しい FragmentScenario クラス
  • 任意の FragmentManagerFragmentFactory を設定して、新しいフラグメントのインスタンスのインスタンス化方法を管理できるようになりました。
  • フラグメントから ViewModels を取得するために、新しい by viewModels() Kotlin プロパティのデリゲートが追加されました。
  • 保留中の入力イベント(クリックなど)がフラグメントの onStop() でキャンセルされるようになりました。

API の変更

  • null 値許容アノテーションがフラグメント API サーフェス全体に大幅に拡張されました。

バグの修正

  • LiveData 内からのフラグメント操作の失敗原因となっていた問題を修正しました。 (b/77944637)

既知の問題

  • FragmentManager からフラグメントが削除された後、ターゲット フラグメントにアクセスできません。
  • fragment-testing が、正しい androidx.test:core:1.0.0 ではなく、androidx.test:core:1.0.0-beta01 に依存しています。