Fragment
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2024 年 10 月 30 日 | 1.8.5 | - | - | - |
依存関係の宣言
フラグメントへの依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
dependencies { def fragment_version = "1.8.3" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.3" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 1.8
バージョン 1.8.5
2024 年 10 月 30 日
androidx.fragment:fragment-*:1.8.5
がリリースされました。バージョン 1.8.5 に含まれる commit については、こちらをご覧ください。
バグの修正
- 予測型「戻る」ジェスチャーがキャンセルまたは中断された後にのみ、
saveBackStack
によってトリガーされるIllegalStateException
を修正しました。(I3387d、b/342419080)
バージョン 1.8.4
2024 年 10 月 2 日
androidx.fragment:fragment-*:1.8.4
がリリースされました。バージョン 1.8.4 には、これらの commit が含まれています。
バグの修正
- Androidx Transitions を使用しているときに、システムの [戻る] ボタンをすばやく押すか、すばやく戻るジェスチャーを行うと、Fragment がクラッシュする問題を修正しました。(Ibc038、b/364804225)
- 予測型「戻る」ジェスチャーを中断すると、フラグメント マネージャーが未定義の状態になり、間違ったフラグメントが表示される問題を修正しました。(If82e2、b/338624457)
AndroidFragment
インスタンスが使用しているクラスを動的にスワップアウトするときにAndroidFragment
で発生するUninitializedPropertyAccessException
の問題を修正しました。(I12dea)。
バージョン 1.8.3
2024 年 9 月 4 日
androidx.fragment:fragment-*:1.8.3
がリリースされました。バージョン 1.8.3 に含まれる commit については、こちらをご覧ください。
バグの修正
FragmentManager
が、予測型「戻る」ジェスチャーを処理する際に保留中のオペレーションを正しく考慮するようになりました。これにより、システムの「戻る」操作でIndexOutOfBoundsException
が発生しなくなります。(I9ba32、b/342316801)。AndroidFragment
が、包含するアクティビティ/フラグメントの状態がすでに保存されているときにコンポジションに追加されても、クラッシュしなくなりました。(I985e9、b/356643968)。
バージョン 1.8.2
2024 年 7 月 24 日
androidx.fragment:fragment-*:1.8.2
がリリースされました。バージョン 1.8.2 には、これらの commit が含まれています。
バグの修正
- 親フラグメントが Fragment バックスタックに配置される場合、
AndroidFragment
が適切に処理されるようになりました。これにより、そのフラグメントにポップバックするときに「ID のビューが見つかりません」という問題が回避されます。(I94608)。 ViewGroup
を受け取るFragmentTransaction.add
メソッドを介して追加されたフラグメントが、onContainerAvailable
を待ってからonStart()
に進むようになりました。これは、AndroidFragment
などのその API のユーザーに影響します。AndroidFragment
は、AndroidFragment
がコンポジションを再入力するまで待ってから、onStart()
に移動するようになりました。(I94608)
バージョン 1.8.1
2024 年 6 月 26 日
androidx.fragment:fragment-*:1.8.1
がリリースされました。バージョン 1.8.1 には、これらの commit が含まれています。
バグの修正
- 予測型「戻る」ジェスチャーを開始したときに、コンテナのないフラグメントがすぐに
DESTROYED
になる問題を修正しました。ジェスチャーが完了するまで、これらのイベントはCREATED
状態のままになります。(If6b83、b/345244539)
バージョン 1.8.0
2024 年 6 月 12 日
androidx.fragment:fragment-*:1.8.0
がリリースされました。バージョン 1.8.0 に含まれる commit は次のとおりです。
1.7.0 以降の重要な変更
fragment-compose
アーティファクトに、フラグメントのクラス名を介してフラグメントを Compose 階層に追加できるAndroidFragment
Composable
が追加されました。Fragment の状態の保存と復元を自動的に処理します。これは、AndroidViewBinding
を使用してフラグメントをインフレートする、以前推奨されていたアプローチの直接的な代替として使用する必要があります。FragmentManager
のOnBackStackChangedListener
インターフェースのonBackStackChangeCancelled
コールバックが、FragmentManager
におけるオペレーションの実行の一部として呼び出されるようになり、onBackStackChangeCommitted
コールバックのタイミングに合わせて近づけるようになりました。
バージョン 1.8.0-rc01
2024 年 5 月 29 日
androidx.fragment:fragment-*:1.8.0-rc01
がリリースされました。バージョン 1.8.0-rc01 に含まれる commit はこちらをご覧ください。
バグの修正
FragmentManagers OnBackStackChangedListener
インターフェースのonBackStackChangeCancelled
コールバックが、FragmentManager
でのオペレーションの実行の一環としてトリガーされるようになりました。これにより、onBackStackChangeCommitted
コールバックのタイミングに近づきます。(I5ebfb、b/332916112)
バージョン 1.8.0-beta01
2024 年 5 月 14 日
androidx.fragment:fragment-*:1.8.0-beta01
がリリースされました。バージョン 1.8.0-beta01 には、これらの commit が含まれています。
バグの修正
- Fragment
1.7.1
以降: 予測型「戻る」は、すべてのフラグメントに Animator または Seekable Androidx の遷移があるトランザクションに対してのみ実行されるようになりました。これにより、一部シーク可能なトランザクションをキャンセルすると黒い画面になる問題が修正されます。(I43037、b/339169168)
バージョン 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 階層に追加できます。フラグメントの状態の保存と復元を自動的に処理します。これは、AndroidViewBinding のComposable
の直接的な代替として使用できます。(b/312895363、Icf841)
ドキュメントの変更
OnBackStackChangedListener
API のドキュメントを更新し、呼び出されるタイミングと使用方法を明記しました。(I0bfd9)
依存関係の更新
- Fragment が Profile Installer 1.3.1 に依存するようになりました。
バージョン 1.7
バージョン 1.7.1
2024 年 5 月 14 日
androidx.fragment:fragment-*:1.7.1
がリリースされました。バージョン 1.7.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- 予測型「戻る」は、すべての Fragment に Animator またはシーケンブル Androidx 遷移があるトランザクションでのみ実行されるようになりました。これにより、一部シーク可能なトランザクションをキャンセルすると画面が空白になる問題が修正されます。(I43037、b/339169168)
バージョン 1.7.0
2024 年 5 月 1 日
androidx.fragment:fragment-*:1.7.0
がリリースされました。バージョン 1.7.0 に含まれる commit は次のとおりです。
予測型「戻る」ジェスチャーのサポート
Animator
を使用している場合、または AndroidX Transition 1.5.0 を使用している場合、フラグメントが予測型アプリ内「戻る」をサポートするようになりました。これにより、ユーザーは「戻る」ジェスチャーを使用して、アニメーション/遷移をシークすることで前のフラグメントを表示し、ジェスチャーを完了してトランザクションを commit するか、キャンセルするかを決定できます。
移行システム | XML リソース | 予測型「戻る」をサポート |
---|---|---|
Animation |
R.anim |
× |
Animator |
R.animator |
はい |
フレームワーク Transition |
R.transition |
× |
AndroidX Transition (Transition 1.4.1 以前) |
R.transition |
× |
AndroidX Transition (Transition 1.5.0) |
R.transition |
はい |
予測型「戻る」ジェスチャーを有効にした後、フラグメントでの予測型「戻る」のサポートに問題がある場合は、問題を再現するサンプル プロジェクトとともに、フラグメントに関する問題を報告してください。予測型「戻る」を無効にするには、アクティビティの onCreate()
で FragmentManager.enabledPredictiveBack(false)
を使用します。
FragmentManager.OnBackStackChangedListener()
に、予測型「戻る」進行状況イベントとキャンセル イベントをそれぞれ受け取るための onBackStackChangeProgressed()
と onBackStackChangeCancelled()
が追加されました。
Fragment Compose アーティファクト
フラグメント ベースのアーキテクチャから完全に Compose ベースのアーキテクチャに移行しているアプリのサポートに重点を置いた新しい fragment-compose
アーティファクトが作成されました。
この新しいアーティファクトで利用できる最初の機能は、Fragment
の content
拡張メソッドです。これは、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 が含まれています。
依存関係の更新
- Fragment が Profile Installer 1.3.1 に依存するようになりました。
バージョン 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 しても、そのフラグメントが破棄されない問題を修正しました。フラグメントはすぐに最終状態に移行します。(Ida0d9)。
- 予測型「戻る」ジェスチャーで受信側の遷移を中断すると、表示されるビューが破棄され、画面が空白になるという Fragment の問題を修正しました。(Id3f22、b/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 については、こちらをご覧ください。
Fragment Compose アーティファクト
フラグメント ベースのアーキテクチャから完全に Compose ベースのアーキテクチャに移行しているアプリのサポートに重点を置いた新しい fragment-compose
アーティファクトが作成されました。
この新しいアーティファクトで利用できる最初の機能は、Fragment
の content
拡張メソッドです。このメソッドは、ComposeView
を自動的に作成し、正しい ViewCompositionStrategy
を設定して、個々の Fragment の UI に Compose を簡単に使用できるようにすることを目的としています。(561cb7、b/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
をスローします。リスナーを手動で追加すると、クラッシュを回避できます。この問題は、Fragments の次回リリースで修正される予定です。
バージョン 1.7.0-alpha08
2024 年 1 月 10 日
androidx.fragment:fragment-*:1.7.0-alpha08
がリリースされました。バージョン 1.7.0-alpha08 に含まれる commit については、こちらをご覧ください。
クリーンアップ
- Transition
1.5.0-alpha06
で修正された Transition ライブラリの回避策を削除しました。(I04356)
バージョン 1.7.0-alpha07
2023 年 11 月 29 日
androidx.fragment:fragment-*:1.7.0-alpha07
がリリースされました。バージョン 1.7.0-alpha07 に含まれる commit については、こちらをご覧ください。
バグの修正
- 共有要素の遷移を設定して、enterTransition と exitTransition も設定できなかったために発生する
NullPointerException
を修正しました。(I8472b) - Fragment
1.6.2
以降:FragmentContainerView
の Fragment がインフレートされたときに、onInflate
コールバックでFragmentManager
、ホスト、ID などの状態にアクセスできるようになりました。(I1e44c、b/307427423) - Fragment
1.6.2
から:clearBackStack
を使用して一連の Fragment を削除する場合、親 Fragment のViewModels
がクリアされると、ネストされた Fragment のViewModel
もクリアされるようになりました。(I6d83c、b/296173018)
バージョン 1.7.0-alpha06
2023 年 10 月 4 日
androidx.fragment:fragment-*:1.7.0-alpha06
がリリースされました。バージョン 1.7.0-alpha06 に含まれる commit については、こちらをご覧ください。
依存関係の更新
- Transition
1.5.0-alpha04
で追加された新しいanimateToStart
API に依存するように、Fragments が更新されました。
バージョン 1.7.0-alpha05
2023 年 9 月 20 日
androidx.fragment:fragment-*:1.7.0-alpha05
がリリースされました。バージョン 1.7.0-alpha05 に含まれる commit については、こちらをご覧ください。
新機能
- フラグメントが、Androidx の遷移を使用する際の予測型「戻る」をサポートするようになりました。これにより、戻るジェスチャーを使用してカスタムの Androidx 遷移で前のフラグメントにシークし、完了したジェスチャーでトランザクションを commit またはキャンセルするかどうかを判断できます。この機能を有効にするには、Transition
1.5.0-alpha03
リリースに依存する必要があります。(Ib49b4、b/285175724)。
既知の問題
- 現在、遷移で「戻る」ジェスチャーを一度キャンセルすると、次回「戻る」ジェスチャーを開始するときに遷移の実行に失敗し、画面に何も表示されないという問題が発生しています。これは、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 については、こちらをご覧ください。
バグの修正
- 予測型「戻る」ジェスチャーをキャンセルする際に、フラグメントが正しい Lifecycle の状態にならない問題を修正しました。(I7cffe、b/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 ボタン ナビゲーションまたは予測型「戻る」ジェスチャーでシステムの「戻る」機能を使用すると、フラグメント マネージャーのバックスタック内の最初のフラグメントがスキップされ、アクティビティが終了していました。(I0664b、b/295231788)。
バージョン 1.7.0-alpha02
2023 年 8 月 9 日
androidx.fragment:fragment-*:1.7.0-alpha02
がリリースされました。バージョン 1.7.0-alpha02 に含まれる commit については、こちらをご覧ください。
バグの修正
- API 34 の予測型「戻る」ジェスチャーで Fragment を使用している場合、シーク(
Animations
、Transitions
)をサポートしていない遷移システムを使用している場合や、遷移システムをまったく使用していない場合、Fragment はジェスチャーが完了するまで待ってから「戻る」アクションを実行するようになりました。(I8100c)
バージョン 1.7.0-alpha01
2023 年 6 月 7 日
androidx.fragment:fragment-*:1.7.0-alpha01
がリリースされました。このバージョンは内部ブランチで開発されています。
新機能
- Fragment は、
Animator
使用時の予測型アプリ内「戻る」のサポートを提供するようになりました。これにより、戻るジェスチャーを使用してカスタム Animator で前のフラグメントを表示し、完了したジェスチャーでトランザクションを commit するかキャンセルするかを決定できます。この新しい動作を無効にするには、試験運用版の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
コールバックでアクセスできるようになりました。(I1e44c、b/307427423)clearBackStack
を使用して一連のフラグメントを削除する場合、親フラグメントのViewModels
が消去されると、ネストされたフラグメントのViewModel
も消去されるようになりました。(I6d83c、b/296173018)。
バージョン 1.6.1
2023 年 7 月 26 日
androidx.fragment:fragment-*:1.6.1
がリリースされました。バージョン 1.6.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- アクティビティが停止されたが破棄されていないときに保存された状態が、フラグメント インスタンスが
RESUMED
状態に戻された後も誤ってキャッシュに保存される問題を修正しました。これにより、複数のバックスタック API を使用してフラグメントを保存および復元するときに、そのフラグメント インスタンスがバックスタックにあった場合、キャッシュに保存された状態が再利用されるようになります。(I71288、b/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
インターフェースが拡張され、onBackStackChangeStarted
とonBackStackChangeCommitted
の 2 つのコールバックが追加されました。これらのコールバックは、各Fragment
がフラグメント バックスタックに追加または削除される直前と、トランザクションが commit された直後に呼び出されます。FragmentStrictMode
は、子フラグメントが親のビュー階層内にネストされているが、親のchildFragmentManager
には追加されていないことを検出する、新しいWrongNestedHierarchyViolation
を追加しました。Intent
またはIntentSender
を受け取るFragment
API とFragmentManager
API に、null 値を渡したときにこれらのメソッドが呼び出す各 Android フレームワーク API が即座にクラッシュする現象を回避するために、@NonNull
でアノテーションが正しく付けられるようになりました。DialogFragment
は、requireComponentDialog()
API を介して基盤となるComponentDialog
へのアクセスを提供するようになりました。- Fragment が Lifecycle
2.6.1
に依存するようになりました。 - Fragment が 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-testing
とandroidx.test
の間のバージョン スキューによる競合が回避されます。
バージョン 1.6.0-rc01
2023 年 5 月 10 日
androidx.fragment:fragment-*:1.6.0-rc01
がリリースされました。バージョン 1.6.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 複数の
startActivityForResult
リクエストが連続して行われたときに、間違ったリクエスト コードでActivityResult
が送信される問題を修正しました。(If0b9d、b/249519359)。 - バックスタックを実際に変更しないトランザクションが、変更するトランザクションと混在している場合に、
onBackStackChangeListener
コールバックがディスパッチされる問題を修正しました。(I0eb5c、b/279306628)
バージョン 1.6.0-beta01
2023 年 4 月 19 日
androidx.fragment:fragment-*:1.6.0-beta01
がリリースされました。バージョン 1.6.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- タイムアウト付きの
postponeEnterTransition
を使用して延期されたフラグメントを置き換えても、延期されたフラグメントがリークしなくなりました。(I2ec7d、b/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
にアクセスできるようになりました。(I022e3、b/234274777)- フラグメントの
commitNow()
API、executePendingTransactions()
API、popBackStackImmediate()
API に@MainThread
アノテーションが付けられました。つまり、メインスレッドから呼び出されない場合、実行時に失敗するのを待つのではなく、すべてのビルドエラーがスローされるようになりました。(Ic9665、b/236538905)
バグの修正
- 同じフレームでの保存と復元によってクラッシュが発生する
FragmentManager
のバグを修正しました。(Ib36af、b/246519668) OnBackStackChangedListener
onBackStackChangeStarted
およびonBackStackChangeCommitted
コールバックは、FragmentManager
バックスタックが変更された場合にのみ実行されるようになりました。(I66055、b/274788957)。
バージョン 1.6.0-alpha08
2023 年 3 月 22 日
androidx.fragment:fragment-*:1.6.0-alpha08
がリリースされました。バージョン 1.6.0-alpha08 に含まれる commit については、こちらをご覧ください。
動作の変更
OnBackStackChangedListener.onBackStackChangeCommited
コールバックのタイミングが調整され、フラグメント オペレーションの実行前に実行されるようになりました。これにより、コールバックに切断されたフラグメントが渡されることがなくなります。(I66a76、b/273568280)
バグの修正
- Fragment
1.5.6
から:Lifecycle
がすでにSTARTED
で結果がすでに利用可能な場合、setFragmentResultListener
内でclearFragmentResultListener
を呼び出しても動作しない問題を修正しました。(If7458)
依存関係の更新
- Fragment が Lifecycle
2.6.1
に依存するようになりました。(586fe7) - Fragment が SavedState
1.2.1
に依存するようになりました。(078e4e) - Fragment が ProfileInstaller
1.3.0
に依存するようになりました。(3fc05b)
バージョン 1.6.0-alpha07
2023 年 3 月 8 日
androidx.fragment:fragment-*:1.6.0-alpha07
がリリースされました。バージョン 1.6.0-alpha07 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment
1.5.6
から: メニュー項目が追加されているかどうかにかかわらず、フラグメントを削除するとアクティビティのメニューが無効になる問題を修正しました。(50f098、b/244336571)。
バージョン 1.6.0-alpha06
2023 年 2 月 22 日
androidx.fragment:fragment-*:1.6.0-alpha06
がリリースされました。バージョン 1.6.0-alpha06 に含まれる commit については、こちらをご覧ください。
動作の変更
- フラグメントがターゲット状態に移行し始める前に、
FragmentManager
のonBackStackChangedListener
で新しいonBackStackChangedStarted
コールバックが実行されるようになりました。(I34726)
バージョン 1.6.0-alpha05
2023 年 2 月 8 日
androidx.fragment:fragment-*:1.6.0-alpha05
がリリースされました。バージョン 1.6.0-alpha05 に含まれる commit については、こちらをご覧ください。
新機能
FragmentManager.OnBackStackChagnedListener
インターフェースでonBackStackChangeStarted
とonBackStackChangeCommitted
の 2 つのコールバックが提供されるようになりました。これにより、FragmentManager
でバックスタックの変更が発生するタイミングについて、追加情報と制御が可能になります。(Ib7ce5、b/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
には追加されていないことを検出するものです。(I72521、b/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-testing
と androidx.test
の間のバージョン スキューによる競合が回避されます。(I8e534、b/128612536)
バグの修正
- Fragment
1.5.5
以降: Fragment は、ViewModel
状態をビュー レジストリの保存済み状態の一部として誤って保存しなくなりました。(I10d2b、b/253546214)
バージョン 1.6.0-alpha03
2022 年 10 月 5 日
androidx.fragment:fragment:1.6.0-alpha03
、androidx.fragment:fragment-ktx:1.6.0-alpha03
、androidx.fragment:fragment-testing:1.6.0-alpha03
がリリースされました。バージョン 1.6.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
DialogFragment
を拡張するクラスが、onDismiss()
のオーバーライドで super を呼び出す必要があります。(I14798、b/238928865)
バグの修正
- フラグメントが常に適切なコールバックを取得できるように、新しいプロバイダ コールバック インターフェース(
OnConfigurationChangedProvider
、OnMultiWindowModeChangedProvider
、OnTrimMemoryProvider
、OnPictureInPictureModeChangedProvider
)の統合に起因する回帰を修正しました。(I9b380、I34581、(I8dfe6、b/242570955)、If9d6b、Id0096、I690b3、I2cba2)
バージョン 1.6.0-alpha02
2022 年 8 月 24 日
androidx.fragment:fragment:1.6.0-alpha02
、androidx.fragment:fragment-ktx:1.6.0-alpha02
、androidx.fragment:fragment-testing:1.6.0-alpha02
がリリースされました。バージョン 1.6.0-alpha02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment
1.5.2
以降:popBackStack()
とreplace()
のトランザクションを同時に実行すると、フラグメントが終了する際に誤ったAnimation
/Animator
が実行されることがある問題を修正しました。(Ib1c07、b/214835303)
バージョン 1.6.0-alpha01
2022 年 7 月 27 日
androidx.fragment:fragment:1.6.0-alpha01
、androidx.fragment:fragment-ktx:1.6.0-alpha01
、androidx.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)
依存関係の更新
- Fragment
1.5.1
以降: Fragment ライブラリは Lifecycle2.5.1
に依存するようになりました。(Id204c) - Fragment
1.5.1
以降: Fragment ライブラリは Activity1.5.1
に依存するようになりました。(I10f07)
バージョン 1.5
バージョン 1.5.7
2023 年 4 月 19 日
androidx.fragment:fragment:1.5.7
、androidx.fragment:fragment-ktx:1.5.7
、androidx.fragment:fragment-testing:1.5.7
がリリースされました。バージョン 1.5.7 に含まれる commit については、こちらをご覧ください。
バグの修正
- タイムアウト付きの
postponeEnterTransition
を使用して延期されたフラグメントを置き換えても、延期されたフラグメントがリークしなくなりました。(I2ec7d、b/276375110)
バージョン 1.5.6
2023 年 3 月 22 日
androidx.fragment:fragment:1.5.6
、androidx.fragment:fragment-ktx:1.5.6
、androidx.fragment:fragment-testing:1.5.6
がリリースされました。バージョン 1.5.6 に含まれる commit については、こちらをご覧ください。
バグの修正
- メニュー項目が追加されているかどうかにかかわらず、フラグメントを削除するとアクティビティのメニューが無効になる問題を修正しました。(50f098、b/244336571)
Lifecycle
がすでにSTARTED
で、結果がすでに利用可能である場合に、setFragmentResultListener
内でclearFragmentResultListener
を呼び出すことができない問題を修正しました。(If7458)
バージョン 1.5.5
2022 年 12 月 7 日
androidx.fragment:fragment:1.5.5
、androidx.fragment:fragment-ktx:1.5.5
、androidx.fragment:fragment-testing:1.5.5
がリリースされました。バージョン 1.5.5 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment は、
ViewModel
状態をビュー レジストリの保存済み状態の一部として誤って保存しなくなりました。(I10d2b、b/253546214)
バージョン 1.5.4
2022 年 10 月 24 日
androidx.fragment:fragment:1.5.4
、androidx.fragment:fragment-ktx:1.5.4
、androidx.fragment:fragment-testing:1.5.4
がリリースされました。バージョン 1.5.4 に含まれる commit については、こちらをご覧ください。
バグの修正
- プロバイダ コールバック インターフェース(
OnConfigurationChangedProvider
、OnMultiWindowModeChangedProvider
、OnTrimMemoryProvider
、OnPictureInPictureModeChangedProvider
)を実装していないホストでカスタムFragmentController
を使用し、子フラグメントにディスパッチできない非推奨のディスパッチ関数を呼び出すエラーを修正しました。(I9b380)
バージョン 1.5.3
2022 年 9 月 21 日
androidx.fragment:fragment:1.5.3
、androidx.fragment:fragment-ktx:1.5.3
、androidx.fragment:fragment-testing:1.5.3
がリリースされました。バージョン 1.5.3 に含まれる commit については、こちらをご覧ください。
バグの修正
- バックスタック上のフラグメントが
onMultiWindowModeChanged()
、onPictureInPictureModeChanged()
、onLowMemory()
、onConfigurationChanged()
のコールバックを取得する原因となっていたエラーを修正しました。(I34581、I8dfe6、b/242570955) - ネストされた子フラグメントが
onMultiWindowModeChanged()
、onPictureInPictureModeChanged()
、onLowMemory()
、onConfigurationChanged()
の複数のコールバックを受け取ることはなくなります。(I690b3、Id0096、If9d6b、I2cba2)
バージョン 1.5.2
2022 年 8 月 10 日
androidx.fragment:fragment:1.5.2
、androidx.fragment:fragment-ktx:1.5.2
、androidx.fragment:fragment-testing:1.5.2
がリリースされました。バージョン 1.5.2 に含まれる commit については、こちらをご覧ください。
バグの修正
popBackStack()
とreplace()
のトランザクションを同時に実行すると、フラグメントが終了する際に誤ったAnimation
/Animator
が実行されることがある問題を修正しました。(Ib1c07、b/214835303)
バージョン 1.5.1
2022 年 7 月 27 日
androidx.fragment:fragment:1.5.1
、androidx.fragment:fragment-ktx:1.5.1
、androidx.fragment:fragment-testing:1.5.1
がリリースされました。バージョン 1.5.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- AGP 7.4 にバンドルされた lint バージョンを使用すると lint がクラッシュする
DialogFragmentCallbacksDetector
の回帰を修正しました。(b/237567009)
依存関係の更新
- Fragment ライブラリは Lifecycle
2.5.1
に依存するようになりました。(Id204c) - Fragment ライブラリは Activity
1.5.1
に依存するようになりました。(I10f07)
バージョン 1.5.0
2022 年 6 月 29 日
androidx.fragment:fragment:1.5.0
、androidx.fragment:fragment-ktx:1.5.0
、androidx.fragment:fragment-testing:1.5.0
がリリースされました。バージョン 1.5.0 に含まれる commit については、こちらをご覧ください。
1.4.0 以降の重要な変更
- CreationExtras の統合 -
Fragment
が Lifecycle2.5.0
のCreationExtras
を介して、ステートレスのViewModelProvider.Factory
を提供できるようになりました。 - Component Dialog の統合 -
DialogFragment
が Activity1.5.0
を介して、onCreateDialog()
によって返されるデフォルトのダイアログとしてComponentDialog
を使用するようになりました。 - 保存済みインスタンスの状態のリファクタリング - フラグメントでインスタンスの状態を保存する方法を順次変更しています。これは、フラグメントに保存されている状態と状態のソースを明確に識別するための取り組みです。現在の変更点は以下のとおりです。
FragmentManager
で、保存済みインスタンスの状態をカスタムParcelable
に直接ではなく、Bundle
に保存できるようになりました。- まだ配信されていない
Fragment Result APIs
を介して設定された結果が、FragmentManager
の内部状態とは別に保存されるようになりました。 - 個々のフラグメントに関連付けられた状態は、
FragmentManager
の内部状態とは別に保存されるようになりました。これにより、個々のフラグメントに関連付けられた保存済みの状態の量をFragment
のデバッグ ロギングに存在する一意の ID に関連付けることができます。
その他の変更点
FragmentStrictMode
で、クラス名とともにallowViolation()
を使用することで非公開のサードパーティ フラグメントが特定の違反ペナルティを回避できるようになりました。- アクティビティの
ActionBar
にメニューを提供する Fragment API は非推奨になりました。Activity1.4.0
に追加されたMenuHost
API とMenuProvider
API は、フラグメントが使用できるように、テスト可能で、ライフサイクルに対応可能な同等の API サーフェスを提供します。
バージョン 1.5.0-rc01
2022 年 5 月 11 日
androidx.fragment:fragment:1.5.0-rc01
、androidx.fragment:fragment-ktx:1.5.0-rc01
、androidx.fragment:fragment-testing:1.5.0-rc01
がリリースされました。バージョン 1.5.0-rc01 に含まれる commit については、こちらをご覧ください。
保存済みインスタンスの状態のリファクタリング
- 個々のフラグメントに関連付けられた状態は、
FragmentManager
の内部状態とは別に保存されるようになりました。これにより、個々のフラグメントに関連付けられた保存済みの状態の量をフラグメントのデバッグ ロギングに存在する一意の ID に関連付けることができます。(a153e0、b/207158202)
バージョン 1.5.0-beta01
2022 年 4 月 20 日
androidx.fragment:fragment:1.5.0-beta01
、androidx.fragment:fragment-ktx:1.5.0-beta01
、androidx.fragment:fragment-testing:1.5.0-beta01
がリリースされました。バージョン 1.5.0-beta01 に含まれる commit については、こちらをご覧ください。
API の変更
DialogFragment
に、showNow
関数と同等のcommitNow
を使用する新しいdismissNow
メソッドが追加されました。これにより、Dialog
がすぐに閉じられることはありません。FragmentManager
の状態が同期的に更新されるだけです。(I15c36、b/72644830)
保存済みインスタンスの状態のリファクタリング
FragmentManager
で、保存済みインスタンスの状態をカスタムParcelable
に直接ではなく、Bundle
に保存できるようになりました。これは、フラグメントによって実際に保存される内容について透明性を高めるための第一歩です。(I93807、b/207158202)- まだ配信されていない Fragment Result API を介して設定された結果が、
FragmentManager
の内部状態とは別に保存されるようになりました。これにより、保存済みインスタンスの状態の一部として保存される結果について、透明性を高めることができます。(I6ea12、b/207158202)
バージョン 1.5.0-alpha05
2022 年 4 月 6 日
androidx.fragment:fragment:1.5.0-alpha05
、androidx.fragment:fragment-ktx:1.5.0-alpha05
、androidx.fragment:fragment-testing:1.5.0-alpha05
がリリースされました。バージョン 1.5.0-alpha05 に含まれる commit については、こちらをご覧ください。
API の変更
Fragment
のsetHasOptionsMenu()
が非推奨になりました。メニューとそのメニュー項目を管理するには、Fragment1.5.0-alpha04
のリリースノートに沿って、新しいメニュー API を使用する必要があります。(I7b4b4、b/226438239)
バージョン 1.5.0-alpha04
2022 年 3 月 23 日
androidx.fragment:fragment:1.5.0-alpha04
、androidx.fragment:fragment-ktx:1.5.0-alpha04
、androidx.fragment:fragment-testing:1.5.0-alpha04
がリリースされました。バージョン 1.5.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
- フラグメントをアクティビティに密結合して単独でテストできなくなるため、アクティビティの
ActionBar
にメニューを提供するフラグメント API は非推奨になりました。Activity1.4.0-alpha01
に追加されたMenuHost
API とMenuProvider
API は、フラグメントが使用できるように、テスト可能で、ライフサイクルに対応可能な同等の API サーフェスを提供します。(I50a59、I20758)
バグの修正
SavedStateViewFactory
が、SavedStateRegistryOwner
で初期化された場合でもCreationExtras
を使用できるようになりました。エクストラが指定されている場合、初期化された引数は無視されます。(I6c43b、b/224844583)
バージョン 1.5.0-alpha03
2022 年 2 月 23 日
androidx.fragment:fragment:1.5.0-alpha03
、androidx.fragment:fragment-ktx:1.5.0-alpha03
、androidx.fragment:fragment-testing:1.5.0-alpha03
がリリースされました。バージョン 1.5.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
CreationExtras
をby viewModels()
関数とby activityViewModels()
関数に渡せるようになりました。(Ibefe7、b/217601110)
動作の変更
DialogFragment
が、onCreateDialog()
によって返されるデフォルトのダイアログとしてComponentDialog
を使用するようになりました。(If3784、b/217618170)
バージョン 1.5.0-alpha02
2022 年 2 月 9 日
androidx.fragment:fragment:1.5.0-alpha02
、androidx.fragment:fragment-ktx:1.5.0-alpha02
、androidx.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-alpha01
、androidx.fragment:fragment-ktx:1.5.0-alpha01
、androidx.fragment:fragment-testing:1.5.0-alpha01
がリリースされました。バージョン 1.5.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
Fragment
が、Lifecycle2.5.0-alpha01
の一部として導入された ViewModel CreationExtras と統合されました。(I3060b、b/207012585)
バグの修正
- Fragment
1.4.1
以降: XML から生成されたビュー ID の値が負の場合に、FragmentContainerView
が不正状態の例外をスローしなくなりました。(Ic185b、b/213086140) - Fragment
1.4.1
以降:by viewModels()
遅延関数でカスタムownerProducer
ラムダを使用する場合、常にフラグメントの Factory が使用されるのではなく、カスタムViewModelProvider.Factory
が提供されていなければ、そのオーナーのdefaultViewModelProviderFactory
が使用されるようになりました。(I56170、b/214106513) Fragment
のregisterForActivityResult()
コールバックからViewModel
に初めてアクセスする際のクラッシュを修正しました。(Iea2b3)
バージョン 1.4
バージョン 1.4.1
2022 年 1 月 26 日
androidx.fragment:fragment:1.4.1
、androidx.fragment:fragment-ktx:1.4.1
、androidx.fragment:fragment-testing:1.4.1
がリリースされました。バージョン 1.4.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- XML から生成されたビュー ID の値が負の場合に、
FragmentContainerView
が不正状態の例外をスローしなくなりました。(Ic185b、b/213086140) by viewModels()
遅延関数でカスタムownerProducer
ラムダを使用する場合、常にフラグメントの Factory が使用されるのではなく、カスタムViewModelProvider.Factory
が提供されていなければ、そのオーナーのdefaultViewModelProviderFactory
が使用されるようになりました。(I56170、b/214106513)
バージョン 1.4.0
2021 年 11 月 17 日
androidx.fragment:fragment:1.4.0
、androidx.fragment:fragment-ktx:1.4.0
、androidx.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
FragmentScenario
がCloseable
を実装し、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-beta01
、androidx.fragment:fragment-ktx:1.4.0-beta01
、androidx.fragment:fragment-testing:1.4.0-beta01
がリリースされました。バージョン 1.4.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 親フラグメントは、独自のコールバックを起動する前に、階層全体で
onHiddenChanged()
をディスパッチするようになりました。(Iedc20、b/77504618) - 開いたキーボードがあるフラグメントからリサイクラー ビューのあるフラグメントに移動すると、キーボードが自動的に閉じるようになりました。(I8b842、b/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-alpha10
、androidx.fragment:fragment-ktx:1.4.0-alpha10
、androidx.fragment:fragment-testing:1.4.0-alpha10
がリリースされました。バージョン 1.4.0-alpha10 に含まれる commit については、こちらをご覧ください。
lint
DetachAndAttachFragmentInSameFragmentTransaction
lint 警告を追加して、同じFragmentTransaction
内で同じFragment
のdetach()
とattach()
の両方の呼び出しを検出するようにしました。これらの相補的な動作は、同じトランザクションで実行されると相互にキャンセルされるため、実際にアクションを実行するには、それぞれを別のトランザクションに分割する必要があります。(aosp/1832956、b/200867930)FragmentAddMenuProvider
lint エラーを追加して、MenuHost
のaddMenuProvider
API を使用する際に、フラグメントの Lifecycle を使用せずにフラグメント ビューの Lifecycle を使用するように修正しました。(aosp/1830457、b/200326272)
ドキュメントの更新情報
- Activity Result API で処理されるようになった API のサポート終了メッセージ(
startActivityForResult
、startIntentSenderForResult
、onActivityResult
、requestPermissions
、onRequestPermissionsResult
)が、すべて詳細に表示されるようになりました。(cce80f) onActivityCreated()
のサポート終了メッセージ(Fragment
とDialogFragment
の両方)が詳細に表示されるようになりました。(224db4)
バージョン 1.4.0-alpha09
2021 年 9 月 15 日
androidx.fragment:fragment:1.4.0-alpha09
、androidx.fragment:fragment-ktx:1.4.0-alpha09
、androidx.fragment:fragment-testing:1.4.0-alpha09
がリリースされました。バージョン 1.4.0-alpha09 に含まれる commit については、こちらをご覧ください。
新機能
clearBackStack(name)
を呼び出して、saveBackStack(name)
で以前に保存された状態を消去できるようになりました。(I70cd7)
API の変更
- Kotlin で
FragmentContainerView
クラスが書き換えられ、getFragment
関数が null 可能性を適切に考慮するようになりました。(If694a、b/189629145) - FragmentStrictMode が Kotlin で記述されるようになりました。(I11767、b/199183506)
バグの修正
setReorderingAllowed(true)
で追加され、保留中のトランザクションを実行する前にすぐに削除される Fragment の状態が適切にクリーンアップされない問題を修正しました。(I8ccb8)
バージョン 1.4.0-alpha08
2021 年 9 月 1 日
androidx.fragment:fragment:1.4.0-alpha08
、androidx.fragment:fragment-ktx:1.4.0-alpha08
、androidx.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-alpha07
、androidx.fragment:fragment-ktx:1.4.0-alpha07
、androidx.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-alpha06
、androidx.fragment:fragment-ktx:1.4.0-alpha06
、androidx.fragment:fragment-testing:1.4.0-alpha06
がリリースされました。バージョン 1.4.0-alpha06 に含まれる commit については、こちらをご覧ください。
バグの修正
FragmentTransaction
の復元中にIllegalStateException
として表示される、または表示されるフラグメントの 2 番目のコピーとして表示されるバックスタックをすばやく切り替える際の、複数のバックスタックに関する問題を修正しました。(I9039f)FragmentManager
が、状態が復元された後でも、以前にsaveBackStack()
を介して保存された状態のコピーを保持する問題を修正しました。(Ied212)show(FragmentTransaction, String)
メソッドで DialogFragment が明示的に追加され、状態が保存された後にDialogFragment
のdismissAllowingStateLoss()
メソッドを呼び出しても、クラッシュしなくなりました。(I84422)
バージョン 1.4.0-alpha05
2021 年 7 月 21 日
androidx.fragment:fragment:1.4.0-alpha05
、androidx.fragment:fragment-ktx:1.4.0-alpha05
、androidx.fragment:fragment-testing:1.4.0-alpha05
がリリースされました。バージョン 1.4.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment
1.3.6
: ルートビューにtransitionGroup=”true”
が設定されている場合、hide()
の使用時に Fragment のビューがGONE
に正しく設定されるようになりました。(aosp/1766655、b/193603427) - Fragment
1.3.6
:FragmentActivity
は、オーバーライドするライフサイクル コールバックでの最初のオペレーションとして、保存済み状態を常にロック解除するようになりました。(I6db7a)
依存関係の更新
- Fragment
1.3.6
: Fragment が Activity1.2.4
に依存するようになりました。(I3a66c)
バージョン 1.4.0-alpha04
2021 年 6 月 30 日
androidx.fragment:fragment:1.4.0-alpha04
、androidx.fragment:fragment-ktx:1.4.0-alpha04
、androidx.fragment:fragment-testing:1.4.0-alpha04
がリリースされました。バージョン 1.4.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
FragmentManager
は、内部でSavedStateRegistry
を使用して状態を保存するようになりました。FragmentController
のsaveAllState()
メソッドとrestoreSavedState()
メソッドのサポートも終了しました。FragmentController
を使用してFragmentActivity
の外部でフラグメントをホストする場合は、FragmentHostCallbacks
にSavedStateRegistryOwner
を実装する必要があります。(Iba68e、b/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-alpha03
、androidx.fragment:fragment-ktx:1.4.0-alpha03
、androidx.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
の呼び出しの制限を元に戻しました。これによりアプリがクラッシュすることはなくなりました。(6b8ddd、b/190622202)
バグの修正
- Fragment
1.3.5
: aosp/1679887 によって Fragment1.3.4
に導入された共有要素の遷移での回帰を修正しました。Fragment が遷移グループを正しく処理するようになり(transitionGroup="true"
で直接設定するか、transitionName
またはbackground
で間接的に設定するかのいずれか)、共有要素がIndexOutOfBoundsException
をスローすることはなくなりました。(I16484、b/188679569、b/188969304) - 削除フラグメントを非表示にしようとしたときに
FragmentManager
がクラッシュすることはなくなりました。(I573dd、b/183634730) - 最上位変数を評価したときに
OnCreateDialogIncorrectCallback
lint チェックがクラッシュすることはなくなりました。(0a9efa、b/189967522)
バージョン 1.4.0-alpha02
2021 年 6 月 2 日
androidx.fragment:fragment:1.4.0-alpha02
、androidx.fragment:fragment-ktx:1.4.0-alpha02
、androidx.fragment:fragment-testing:1.4.0-alpha02
がリリースされました。バージョン 1.4.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
FragmentManager
を介してロギングが有効になっている場合、現在使用されている厳格モードのポリシーに関係なく、FragmentStrictMode
が常に違反をログに記録するようになりました。(I02df6、b/187872638)FragmentStrictMode
が、特定のFragment
クラスを厳格モードのViolation
から除外できるようになりました。これにより、このクラスがペナルティを迂回できるようになります。(Ib4e5d、b/184786736)FragmentStrictMode
Violation
クラスが拡張され、各違反に基づいて構造情報が追加されるようになりました。これにより、違反の原因と違反したフラグメントを正確に確認できます(If5118、b/187871150)。各Violation
には次のものが含まれます。WrongFragmentContainerViolation
に、Fragment
の追加が試みられたViewGroup
が含まれるようになりました。(I83c75、b/187871150)TargetFragmentUsageViolation
がSetTargetFragmentUsageViolation
、GetTargetFragmentUsageViolation
、GetTargetFragmentRequestCodeUsageViolation
に拡張され、SetTargetFragmentUsageViolation
にターゲット フラグメントとリクエスト コードが含まれるようになりました。(I741b4、b/187871150)SetUserVisibleHintViolation
に、setUserVisibleHint()
に渡されたブール値が含まれるようになりました。(I00585、b/187871150)FragmentTagUsageViolation
に、<fragment>
タグがフラグメントをインフレートしようとした ViewGroup が含まれるようになりました。(I5dbbc、b/187871150)FragmentReuseViolation
に、違反の原因となったFragment
の前のインスタンスの一意の ID が含まれるようになりました。(I0544d、b/187871150)RetainInstanceUsageViolation
は抽象クラスとなり、2 つのサブクラス(SetRetainInstanceUsageViolation
とGetRetainInstanceUsageViolation
)を持つようになりました。これらのサブクラスは、違反の種類に応じて 2 つのケースを表します。(Ic81e5、b/187871150)
動作の変更
- プログラムまたは XML で
fitsSystemWindow
属性を変更しようとすると、FragmentContainerView
が例外をスローするようになりました。インセットは個々のフラグメントのビューによって処理されます。(Ie6651、b/187304502)
バージョン 1.4.0-alpha01
2021 年 5 月 18 日
androidx.fragment:fragment:1.4.0-alpha01
、androidx.fragment:fragment-ktx:1.4.0-alpha01
、androidx.fragment:fragment-testing:1.4.0-alpha01
がリリースされました。バージョン 1.4.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
FragmentContainerView
は、コンテナに最後に追加されたフラグメントを返すgetFragment()
メソッドを提供するようになりました。このメソッドはfindFragmentById()
と同じロジックでFragmentContainerView
の ID を使用しますが、呼び出しを連鎖させることができます。(Ife17a、b/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、#150、b/143774122)
detectFragmentReuse()
は、以前に削除されたFragment
インスタンスがFragmentManager
に再度追加されているかどうかを検出します。Fragment
インスタンスが破棄されてFragmentManager
から削除された後で、そのインスタンスへの参照を操作または保持してはなりません。(#142、b/153738653)detectFragmentTagUsage()
は、レイアウト XML 内での<fragment>
タグの使用を検出します。レイアウトの一部としてフラグメントをインフレートする場合は、常にFragmentContainerView
を使用する必要があります。(#141、b/153738235)detectWrongFragmentContainer()
は、FragmentContainerView
ではないコンテナへのフラグメントの追加を検出します。レイアウト内のフラグメントのコンテナとして、常にFragmentContainerView
を使用する必要があります。(#146、b/181137036)detectRetainInstanceUsage()
は、非推奨のsetRetainInstance()
API またはgetRetainInstance()
API の使用を検出します。(#140、b/153737954)detectSetUserVisibleHint()
は、非推奨のsetUserVisibleHint()
API の使用を検出します。(#136、b/153738974)detectTargetFragmentUsage()
は、非推奨のsetTargetFragment()
API、getTargetFragment()
API、getTargetRequestCode()
API の使用を検出します。(#139、b/153737745)
API の変更
FragmentManager.enableNewStateManager(boolean)
の試験運用版 API が削除され、新しい状態マネージャーのみが使用可能になりました。(I90036、b/162776418)FragmentScenario
がCloseable
を実装し、Kotlin のuse
メソッドまたは try-with-resources で使用できるようになりました。(#121、b/143774122)
新しい lint チェック
DialogFragment
内でLayoutInflater.from(Context)
を使用すると、UseGetLayoutInflater
lint チェックで警告が表示されるようになりました。LayoutInflater
を適切に取得するには、常にダイアログ フラグメントのgetLayoutInflater()
メソッドを使用する必要があります。(#156、b/170781346)DialogFragment
のonCreateDialog()
メソッドでsetOnCancelListener
またはsetOnDismissListener
を呼び出すと、DialogFragmentCallbacksDetector
lint チェックで警告が表示されるようになりました。これらのリスナーはDialogFragment
自体によって所有されており、これらのコールバックを受信するにはonCancel()
とonDismiss()
をオーバーライドする必要があります。(#171、b/181780047、b/187524311)
バグの修正
- Fragment 1.3.4 以降: Fragment 内で
ViewModelProvider
またはviewModel()
の Jetpack Compose メソッドとともにViewTreeViewModelStoreOwner.get()
API を使用した場合に Fragment1.3.3
で発生する回帰を修正しました。このようなユースケースで、getDefaultViewModelProviderFactory()
をオーバーライドした場合に Fragment によって提供されるViewModelProvider.Factory
を正しく使用できるようになりました(この動作は、Hilt を使用する際の@AndroidEntryPoint
アノテーションが付けられた Fragment と同様です)。このメソッドをオーバーライドしない場合、Fragment のビューとともに状態を保存および復元するSavedStateViewModelFactory
がデフォルトのファクトリとして作成されます。(I5cbfa、b/186097368) - Fragment 1.3.4 以降: API 29 で
FragmentContainerView
を使用した場合に、インセットが無期限にディスパッチされることがなくなります。これにより、BottomNavigationBar
およびFloatingActionButton
インスタンスに関する問題が解決されます。(I1bb78、b/186012452) - Fragment 1.3.4 以降: プロセスの異常終了後に、フラグメントの結果バンドルから Parcelable を取得できるようになりました。(I65932、b/187443158)
- Fragment 1.3.4 以降: ViewGroup で共有要素の遷移を行うときに、ViewGroup で
transitionGroup
が false に設定されていれば、適切に遷移するようになりました。(I99675)
外部からの協力
FragmentScenario
へのCloseable
の実装につき、simonschiller 氏に感謝いたします。(#121、b/143774122)- このリリースでの
FragmentStrictMode
API 全体の追加につき、simonshiller 氏に感謝いたします。(#123、#131、#150、b/143774122、#142、b/153738653、#141、b/153738235、#146、b/181137036、#140、b/153737954、#136、b/153738974、#139、b/153737745) UseGetLayoutInflater
lint チェックの追加につき、tatocaster 氏に感謝いたします。(#156、b/170781346)DialogFragmentCallbacksDetector
lint チェックの追加につき、tatocaster 氏に感謝いたします。(#171、b/181780047)
バージョン 1.3
バージョン 1.3.6
2021 年 7 月 21 日
androidx.fragment:fragment:1.3.6
、androidx.fragment:fragment-ktx:1.3.6
、androidx.fragment:fragment-testing:1.3.6
がリリースされました。バージョン 1.3.6 に含まれる commit については、こちらをご覧ください。
バグの修正
- Fragment
1.4.0-alpha03
: 削除フラグメントを非表示にしようとしたときにFragmentManager
がクラッシュすることはなくなりました。(I573dd、b/183634730) - ルートビューで
transitionGroup=”true”
が設定されている場合、hide()
の使用時に Fragment のビューがGONE
に正しく設定されるようになりました。(aosp/1766655、b/193603427) FragmentActivity
は、オーバーライドするライフサイクル コールバックでの最初のオペレーションとして、保存済み状態を常にロック解除するようになりました。(I6db7a)
依存関係の更新
- Fragment
1.3.6
: Fragment が Activity1.2.4
に依存するようになりました。(I3a66c)
バージョン 1.3.5
2021 年 6 月 16 日
androidx.fragment:fragment:1.3.5
、androidx.fragment:fragment-ktx:1.3.5
、androidx.fragment:fragment-testing:1.3.5
がリリースされました。バージョン 1.3.5 に含まれる commit については、こちらをご覧ください。
バグの修正
- aosp/1679887 によって Fragment
1.3.4
に導入された共有要素の遷移での回帰を修正しました。Fragment が遷移グループを正しく処理するようになり(transitionGroup="true"
で直接設定するか、transitionName
またはbackground
で間接的に設定するかのいずれか)、共有要素がIndexOutOfBoundsException
をスローすることはなくなりました。(I16484、b/188679569、b/188969304)
バージョン 1.3.4
2021 年 5 月 18 日
androidx.fragment:fragment:1.3.4
、androidx.fragment:fragment-ktx:1.3.4
、androidx.fragment:fragment-testing:1.3.4
がリリースされました。バージョン 1.3.4 に含まれる commit については、こちらをご覧ください。
バグの修正
- Hilt を使用する際に Fragment 内で
ViewModelProvider
またはviewModel()
の Jetpack Compose メソッドとともにViewTreeViewModelStoreOwner.get()
API を使用した場合に Fragment1.3.3
で発生する回帰を修正しました。このようなユースケースで、getDefaultViewModelProviderFactory()
をオーバーライドした場合に Fragment によって提供されるViewModelProvider.Factory
を正しく使用できるようになりました(この動作は、@AndroidEntryPoint
アノテーションが付けられた Fragment と同様です)。このメソッドをオーバーライドしない場合、Fragment のビューとともに状態を保存および復元するSavedStateViewModelFactory
がデフォルトのファクトリとして作成されます。(I5cbfa、b/186097368) - API 29 で
FragmentContainerView
を使用した場合に、インセットが無期限にディスパッチされることがなくなります。これにより、BottomNavigationBar
およびFloatingActionButton
インスタンスに関する問題が解決されます。(I1bb78、b/186012452) - プロセスの異常終了後に、フラグメントの結果バンドルから Parcelable を取得できるようになりました。(I65932、b/187443158)
- ViewGroup で共有要素の遷移を行うときに、ViewGroup で
transitionGroup
が false に設定されていれば、適切に遷移するようになりました。(I99675)
バージョン 1.3.3
2021 年 4 月 21 日
androidx.fragment:fragment:1.3.3
、androidx.fragment:fragment-ktx:1.3.3
、androidx.fragment:fragment-testing:1.3.3
がリリースされました。バージョン 1.3.3 に含まれる commit については、こちらをご覧ください。
新機能
SavedStateViewModelFactory
を、Fragment のビューでViewTreeSavedStateRegistryOwner.get()
を使用して返されたSavedStateRegistryOwner
とともに使用できるようになりました。(I21acf、b/181577191)
バグの修正
- Fragment
1.3.2
で生じる回帰を修正しました。NavHostFragment
などが使用するsetPrimaryNavFragment
オペレーションが含まれるFragmentTransaction
をポップすると、popEnter
アニメーションが実行されなくなっていました。(I38c87、b/183877426) FragmentContainerView
で、すべてのFragment
に新しいWindowInsets
のセットがディスパッチされるようになり、各フラグメントがインセットを個別に使用できるようになりました。(I63f68、b/172153900)- カスタム
Dialog
クラスのコンテナと同じ ID を持つコンテナに子フラグメントが追加された場合でも、DialogFragment
が適切に処理されるようになりました。これにより、BottomSheetDialog
などのダイアログによって内部で使用される ID の再利用時に生じていたビュー階層の問題が修正されました。(Ie6279、b/180021387) FragmentManager.dump()
が、アクティブなフラグメントのリスト内の最初のフラグメントを適切にインデントするようになりました。(If5c33、b/183705451)
新しいステート マネージャーのバグの修正
- フラグメントの新しいステート マネージャーが、hide オペレーションによる終了遷移を適切に処理するようになりました。(I9e4de、b/184830265)
バージョン 1.3.2
2021 年 3 月 24 日
androidx.fragment:fragment:1.3.2
、androidx.fragment:fragment-ktx:1.3.2
、androidx.fragment:fragment-testing:1.3.2
がリリースされました。バージョン 1.3.2 に含まれる commit については、こちらをご覧ください。
新しいステート マネージャーのバグの修正
popBackStack()
とcommit()
の両方のオペレーションを同時に実行すると、最後のオペレーションで一部のポップ アニメーションおよび入力アニメーションが実行されるのではなく、すべてのアニメーションの方向が設定されるようになりました。(I7072e、b/181142246)- 共有要素階層内のビューでは、共有要素の遷移を行う際に遷移名がクリアされなくなります。(I4d4a6、b/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.1
、androidx.fragment:fragment-ktx:1.3.1
、androidx.fragment:fragment-testing:1.3.1
がリリースされました。バージョン 1.3.1 に含まれる commit については、こちらをご覧ください。
新機能
DialogFragment
内のダイアログが DecorView を介して ViewTree オーナーにアクセスできるようになり、ComposeView
でDialogFragment
を使用できるようになりました。(Ib9290、b/180691023)
バグの修正
- FragmentContainerView を使用してすでに
RESUMED
状態のアクティビティにインフレートされたフラグメントが、構成の変更後に適切に表示されるようになりました。(Ie14c8、b/180538371) - フラグメント
toString()
の末尾に余分な}
がなくなりました(I54705、b/177761088) - FragmentActivity のオーバーライド済みメソッドが、基本メソッド javaDoc を適切に継承するようになりました(I736ce、b/139548782)
setFragmentResult
とsetFragmentResultListener
のドキュメントのパラメータ ドキュメントが更新され、null 許容を受け取らなくなったことが反映されました(I990ba、b/178348386)
新しいステート マネージャーのバグの修正
mFocusedView
によって生じるフラグメントでのメモリリークを修正しました(Ib4e9e、b/179925887)- トランザクションの表示 / 非表示を使用したときに、フラグメントが
onCreateOptionsMenu
を適切に呼び出すようになりました(I8bce8、b/180255554) - フラグメントが配置される前に遷移し始める子フラグメントが、適切に
RESUMED
状態に移行するようになりました(Ic11e6、b/180825150) <fragment>
タグを使用してインフレートされたフラグメントが、常にRESUMED
状態に移行するようになりました(I452ac、I9fa49)
依存関係の更新
- Fragment 1.3.1 が、Activity
1.2.1
に依存するようになりました。(I557b9)
バージョン 1.3.0
2021 年 2 月 10 日
androidx.fragment:fragment:1.3.0
、androidx.fragment:fragment-ktx:1.3.0
、androidx.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
:FragmentActivity
とFragment
のonAttachFragment()
コールバックのサポートが終了しました。より柔軟な代替手段を提供するために、新しくFragmentOnAttachListener
が追加されました。これにより、onAttachFragment()
を個別のテスト可能なリスナーにデリゲートしたり、直接の子 FragmentManager 以外の FragmentManager にリスナーを追加したりできるようになりました。FragmentScenario
の改善:fragment-testing
アーティファクトのFragmentScenario
クラスが Kotlin に書き換えられ、さまざまな改善が行われました。FragmentScenario
はsetMaxLifecycle()
を使用してmoveToState()
を実装することにより、すべての API レベルで一貫した動作を保証し、Fragment の状態を基になる Activity から分離するようになりました。FragmentScenario
は初期のLifecycle.State
を設定できるようになり、各Lifecycle.State
に初めて移行する前にフラグメントの状態のアサーションを行えるようになりました。onFragment
のFragmentScenario
API の代替機能を Kotlin で具体化された拡張メソッドwithFragment
(値を返すことができます)の形式で追加しました。指定されたブロックで発生した例外を再スローする点が特に重要です。
ViewTree
のサポート: Lifecycle2.3.0
と SavedState1.1.0
に追加されたViewTreeLifecycleOwner.get(View)
、ViewTreeViewModelStoreOwner.get(View)
、ViewTreeSavedStateRegistryOwner
API に対するサポートをFragment
に追加し、Fragment
内でView
を使用する際に、ViewModelStoreOwner
として、またはフラグメントのビュー Lifecycle に関連付けられたSavedStateRegistryOwner
、LifecycleOwner
として Fragment を返すようになりました。TRANSIT_
アニメーションの変更: フラグメントのデフォルトのエフェクト(TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
、TRANSIT_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-rc02
、androidx.fragment:fragment-ktx:1.3.0-rc02
、androidx.fragment:fragment-testing:1.3.0-rc02
がリリースされました。バージョン 1.3.0-rc02 に含まれる commit については、こちらをご覧ください。
バグの修正
- 構成の変更後、親
DialogFragment
が子DialogFragment
の上に表示される問題を修正しました。これにより、子ダイアログ フラグメントが常に親ダイアログ フラグメントの上に表示されるようになりました。(I30806、b/177439520) Animation
を使用してhide
オペレーションを行うと、非表示フラグメントがアニメーションの終了時に点滅する問題を修正しました。(I57e22、b/175417675)- ビュー階層が追加される前に遷移が追加されたフラグメントが、適切に
RESUMED
状態に移行するようになりました。(I1fc1d、b/177154873)
新しいステート マネージャーのバグの修正
- Fragment のビュー
Lifecycle
がCREATED
状態に移行する前に Fragment のビューが破棄された場合に、Lifecycle
が適切に処理されるようになりました。これにより、「INITIALIZED からのイベントはありません」という例外を回避できます。(eda2bd、b/176138645) Animator
を使用する Fragment が、FragmentContainerView
の使用時に正しい順序で表示されるようになりました。(Id9aa3、b/176089197)
バージョン 1.3.0-rc01
2020 年 12 月 16 日
androidx.fragment:fragment:1.3.0-rc01
、androidx.fragment:fragment-ktx:1.3.0-rc01
、androidx.fragment:fragment-testing:1.3.0-rc01
がリリースされました。バージョン 1.3.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
onPrepareOptionsMenu()
がonCreateOptionsMenu()
と同じロジックに従うようになり、親フラグメントがsetMenuVisibility(false)
を呼び出したときに呼び出されなくなりました。(Id7de8、b/173203654)
新しいステート マネージャーのバグの修正
Animation
を含むフラグメントをFragmentContainerView
に追加してからポップ オペレーションでその追加を中断した場合のリークと視覚的アーティファクトを修正しました。(I952d8)onCreate()
メソッドまたはonViewCreated()
メソッドでフラグメントが置き換えられた場合に、フラグメントのビューがビュー階層に残る問題を修正しました。(I8a7d5)- Fragment のルートビューが再開されたときに、フォーカスが適切に復元されるようになりました。(Ifc84b)
- 同じフラグメント トランザクションでポップ オペレーションと置換オペレーションを組み合わせた場合に、適切なアニメーションが表示されるようになりました。(Ifd4e4、b/170328691)
バージョン 1.3.0-beta02
2020 年 12 月 2 日
androidx.fragment:fragment:1.3.0-beta02
、androidx.fragment:fragment-ktx:1.3.0-beta02
、androidx.fragment:fragment-testing:1.3.0-beta02
がリリースされました。バージョン 1.3.0-beta02 に含まれる commit については、こちらをご覧ください。
新機能
FragmentScenario
が Kotlin に完全に変換されました。ソースとバイナリの互換性は、FragmentAction
に対する Kotlin 1.4 の機能インターフェースを使用することで維持されます。(I19d31)
動作の変更
class
またはandroid:name
属性を使用してフラグメントをインフレートしない FragmentContainerView をFragmentActivity
の外部で使用できるようになりました。(Id4397、b/172266337)- フラグメントの最大ライフサイクルを
DESTROYED
に設定しようとすると、IllegalArgumentException
がスローされるようになりました。(Ie7651、b/170765622) DESTROYED
状態で FragmentScenario を初期化するとIllegalArgumentException
がスローされるようになりました。(I73590、b/170765622)
新しいステート マネージャーのバグの修正
Animator
またはいずれかのTRANSIT_FRAGMENT_
オプションを使用しているフラグメント遷移を中断した場合に、ビューが最終状態に到達しない問題を修正しました。(I92426、b/169874632)- exit する
Animation
を含むフラグメントが適切に破棄されない問題を修正しました。(I83d65) - エフェクトが元に戻されたフラグメントを exit した場合に、フラグメントが適切にキャンセルされて適切な enter エフェクトで再開されるようになりました。(I62226、b/167092035)
hide()
の exitAnimator
が実行されない問題を修正しました。(Id7ffe)- フラグメントを延期してすぐに開始した場合に、適切に表示されるようになりました。(Ie713b、b/170022857)
- アニメーション中にフォーカスされているビューを削除するフラグメントが
RESUMED
になったとき、デタッチされたビューにフォーカスを復元しようとしなくなりました。(I38c65、b/172925703)
外部からの協力
FragmentFactory
が、異なるClassLoader
インスタンスのフラグメント クラスを個別にキャッシュに保存するようになりました。Simon Schiller 氏に感謝いたします。(#87、b/113886460)
バージョン 1.3.0-beta01
2020 年 10 月 1 日
androidx.fragment:fragment:1.3.0-beta01
、androidx.fragment:fragment-ktx:1.3.0-beta01
、androidx.fragment:fragment-testing:1.3.0-beta01
がリリースされました。バージョン 1.3.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
setMaxLifecycle()
は、フラグメントがCREATED
に移行していない限り、Lifecycle
状態をINITIALIZING
に設定できるようになりました。(b/159662173)
API の変更
- Kotlin 1.4 を使用できるように、AndroidX をアップグレードしました。(Id6471、b/165307851、b/165300826)
動作の変更
- フラグメントのリソース ファイルが正常に非公開になりました。(aosp/1425237)
バグの修正
<fragment>
タグを使用してインフレートされたフラグメントは、ビューがコンテナに追加されてから STARTED に移行するまで適切に待機するようになりました。(I02f4c)- フラグメントが表示され、
setMaxLifecycle()
からCREATED
に変わると、exit エフェクトを適切に実行するようになりました。(b/165822335) - バックスタックに追加されていないデタッチされたフラグメントを削除しても、メモリリークが発生しなくなりました。(Nicklas Ansman Giertz 氏ご提供)(b/166489383)
- アクティブなフラグメントは常に null 以外の
FragmentManager
を持ち、null 以外のFragmentManager
を持つフラグメントは常にアクティブと見なされるようになります。(aosp/1422346) - フラグメントのデフォルトのエフェクト(
TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
、TRANSIT_FRAGMENT_FADE
)では、Animation
の代わりにAnimator
が使用されるようになりました。(b/166155034)
新しいステート マネージャーのバグの修正
- フラグメントは、アニメーションを開始する直前に、ビュー フォーカス状態を適切に復元するようになりました。(Icc256)
- 共有要素の遷移のみを持つフラグメントは、特殊エフェクトを正しく処理するようになりました。つまり、実際には最終状態に移行するようになります。(Iaebc7、b/166658128)
- フラグメント ビューを、破棄される前に常にコンテナから削除するようにしました。(Id5876)
- 新しいステート マネージャーは、enter するフラグメント ビューを追加する前に、exit するフラグメント ビューを常に削除するようになりました。(I41a6e)
- 新しいステート マネージャーは、フラグメント ビューの表示に対する明示的な変更に準拠するようになりました。つまり、アニメーションの開始前に enter するフラグメントのビューを
INVISIBLE
に設定した場合、実際には表示されないままになっています。(b/164481490) - フラグメントは
Animations
よりもAnimators
を優先します。つまり、両方を持つフラグメントはAnimator
のみを実行し、Animation
を無視します。(b/167579557) - 新しいステート マネージャーでは、enter するアニメーションを使用しているときにフラグメントがフラッシュすることがなくなりました。(b/163084315)
既知の問題
新しいステート マネージャーを使用しているときに、前のフラグメントに戻るのではなく、特殊エフェクトの enter 中に戻るボタンを押すと、以前のフラグメントは追加されることなく画面が真っ白になります。(b/167259187、b/167092035、b/168442830)
バージョン 1.3.0-alpha08
2020 年 8 月 19 日
androidx.fragment:fragment:1.3.0-alpha08
、androidx.fragment:fragment-ktx:1.3.0-alpha08
、androidx.fragment:fragment-testing:1.3.0-alpha08
がリリースされました。バージョン 1.3.0-alpha08 に含まれる commit については、こちらをご覧ください。
新しいステート マネージャー
このリリースでは、FragmentManager
の内部状態管理で大幅なリファクタリングを行っています。これは、ライフサイクル関連のメソッド、アニメーション、遷移のディスパッチ、延期されたトランザクションの処理方法に影響します。これはデフォルトで有効です。詳しくは、Fragments 内部の再構築に関するブログ投稿をご覧ください。(b/139536619、b/147749580)
FragmentManager.enableNewStateManager(boolean)
の試験運用版の API を使用すると、FragmentManager が新しいステート マネージャーを使用するかどうかを制御できます。(I7b6ee)
以下の問題は、新しいステート マネージャーを使用した場合にのみ解決されます。
- 新しいフラグメントを開始する前に、
replace
オペレーションの以前のフラグメントを正しく停止するようになりました。(b/161654580) - Fragment では、同じフラグメントでアニメーション同士が競合するのを防ぐようになりました。これにより、
Animation
がすべてのTransition
エフェクトをオーバーライドする事態と、個々のフラグメントのAnimator
とTransition
の両方が実行される事態を避けることができます。(b/149569323) - 最後に enter したフラグメントと最初に exit したフラグメントだけでなく、enter、exit したすべてのフラグメントの
enterTransition
とexitTranstion
が実行されるようになりました。(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()
ライフサイクル メソッドでActivityResultLauncher
のlaunch()
を呼び出すことができるようになりました。(b/161464278) onCreate()
の後にregisterForActivityResult()
を呼び出すと、通知なしに構成変更後の結果提供に失敗するのではなく、それが許可されていないことを示す例外がスローされるようになりました。(b/162255449)FragmentActivity
は、Activity1.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-alpha07
、androidx.fragment:fragment-ktx:1.3.0-alpha07
、androidx.fragment:fragment-testing:1.3.0-alpha07
がリリースされました。バージョン 1.3.0-alpha07 に含まれる commit については、こちらをご覧ください。
新機能
FragmentScenario
は、Fragment を常にRESUMED
状態に移行するのではなく、CREATED
、STARTED
、RESUMED
のいずれかの Lifecycle 初期状態を設定できるようになりました。(b/159662750)onFragment
のFragmentScenario
API の代替機能を Kotlin で具体化された拡張メソッドwithFragment
(値を返すことができます)の形式で追加しました。指定されたブロックで発生した例外を再スローする点が特に重要です。(b/158697631)
動作の変更
FragmentScenario
はsetMaxLifecycle()
を使用して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-alpha06
、androidx.fragment:fragment-ktx:1.3.0-alpha06
、androidx.fragment:fragment-testing:1.3.0-alpha06
がリリースされました。バージョン 1.3.0-alpha06 に含まれる commit については、こちらをご覧ください。
新機能
FragmentActivity
とFragment
のonAttachFragment()
コールバックのサポートが終了しました。より柔軟な代替手段を提供するために、新しく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-alpha05
、androidx.fragment:fragment-ktx:1.3.0-alpha05
、androidx.fragment:fragment-testing:1.3.0-alpha05
がリリースされました。バージョン 1.3.0-alpha05 に含まれる commit については、こちらをご覧ください。
新機能
Fragment
内でView
を使用する際の、Lifecycle2.3.0-alpha03
のViewTreeViewModelStoreOwner
と SavedState1.1.0-alpha01
のViewTreeSavedStateRegistryOwner
のサポートを追加しました。(aosp/1297993、aosp/1300264)
API の変更
setFragmentResult()
API とsetFragmentResultListener()
API がそれぞれ、非 null のBundle
とFragmentResultListener
を受け取るようになりました。以前に設定された結果またはリスナーを明示的にクリアするには、新しいclearFragmentResult()
メソッドとclearFragmentResultListener()
メソッドを使用します。(b/155416778)- ラムダを取る
setFragmentResultListener()
Kotlin 拡張機能がinline
としてマークされるようになりました。(b/155323404)
動作の変更
- 以前サポートが終了した、
Fragment
のstartActivityForResult()
、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-alpha04
、androidx.fragment:fragment-ktx:1.3.0-alpha04
、androidx.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-alpha03
、androidx.fragment:fragment-ktx:1.3.0-alpha03
、androidx.fragment:fragment-testing:1.3.0-alpha03
がリリースされました。バージョン 1.3.0-alpha03 に含まれる commit については、こちらをご覧ください。
API の変更
Fragment
のprepareCall
メソッドがfinal
になりました。(b/152439361)
バグの修正
BottomSheetDialogFragment
の使用時に Fragment1.3.0-alpha02
で発生する回帰を修正しました。(b/151652127、aosp/1263328、aosp/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
に依存するようになったことで、Activity1.2.0-alpha02
に導入された Activity Result API が大幅に改善されました。
バージョン 1.3.0-alpha02
2020 年 3 月 18 日
androidx.fragment:fragment:1.3.0-alpha02
、androidx.fragment:fragment-ktx:1.3.0-alpha02
、androidx.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()
のアクティビティのLifecycle
にLifeCycleObserver
を登録し、onCreate()
のコールバックを受け取ったら削除する必要があります。 (b/144309266)
バグの修正
- Fragment
1.2.3
:onCreateDialog()
内からgetLayoutInflater()
を呼び出した際にStackOverflowError
が発生するDialogFragment
のバグを修正しました。(b/117894767、aosp/1258664) - Fragment
1.2.3
: 未使用のフラグメント クラスを削除できるように、フラグメントに含まれる ProGuard ルールの範囲を縮小しました。(b/149665169) - Fragment
1.2.3
以降: Kotlin プロパティ名をシャドウするローカル変数名を使用した場合のUseRequireInsteadOfGet
lint チェックでの誤検出を修正しました。(b/149891163) - Fragment
1.2.3
以降: レイアウトのプレビューで誤ったコンストラクタを使用しても、FragmentContainerView
がUnsupportedOperationException
をスローしなくなりました。(b/149707833)
既知の問題
BottomSheetDialogFragment
が画面上でダイアログを正しい位置に配置しなくなりました。(b/151652127)
バージョン 1.3.0-alpha01
2020 年 3 月 4 日
androidx.fragment:fragment:1.3.0-alpha01
、androidx.fragment:fragment-ktx:1.3.0-alpha01
、androidx.fragment:fragment-testing:1.3.0-alpha01
がリリースされました。バージョン 1.3.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
- Lifecycle
2.3.0-alpha01
に追加されたViewTreeLifecycleOwner.get(View)
API に対するサポートを追加し、フラグメントのviewLifecycleOwner
がonCreateView()
によって返される任意のビューの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
のみが正しく保持されるようになり、Fragment1.2.1
で発生する回帰が修正されました。(b/149665169) - Fragment
1.2.2
に追加されたrequire___()
Lint ルールが、ブロックされた Kotlin プロパティ名(view
)と同じ名前を持つローカル変数に対して誤検出しなくなりました。(b/149891163) - Android Studio でレイアウト プレビューを使用した場合に、
FragmentContainerView
がUnsupportedOperationException
をスローしなくなりました。(b/149707833) - 状態が保存された後に追加された保持フラグメントが、構成の変更が行われるたびに再作成、破棄されない問題を修正しました。(b/145832397)
バージョン 1.2.5
バージョン 1.2.5
2020 年 6 月 10 日
androidx.fragment:fragment:1.2.5
、androidx.fragment:fragment-ktx:1.2.5
、androidx.fragment:fragment-testing:1.2.5
がリリースされました。バージョン 1.2.5 に含まれる commit については、こちらをご覧ください。
バグの修正
- フラグメントのライフサイクルの動作が反映され、
onSaveInstanceState()
が呼び出される前にフラグメントのgetViewLifecycleOwner()
が停止するようになりました。これは以前に Fragment1.3.0-alpha04
でリリースされたものです。(b/154645875) - フラグメントで
setMenuVisibility(false)
を呼び出すと、子フラグメントによって提供されるメニューの表示が正しく変更されるようになりました。これは以前に Fragment1.3.0-alpha04
でリリースされたものです。(b/153593580)
バージョン 1.2.4
バージョン 1.2.4
2020 年 4 月 1 日
androidx.fragment:fragment:1.2.4
、androidx.fragment:fragment-ktx:1.2.4
、androidx.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.3
、androidx.fragment:fragment-ktx:1.2.3
、androidx.fragment:fragment-testing:1.2.3
がリリースされました。バージョン 1.2.3 に含まれる commit については、こちらをご覧ください。
バグの修正
onCreateDialog()
内からgetLayoutInflater()
を呼び出す際にStackOverflowError
が発生するDialogFragment
のバグを修正しました。(b/117894767、aosp/1258665)- 未使用のフラグメント クラスを削除できるように、フラグメントに含まれる ProGuard ルールの範囲を縮小しました。(b/149665169)
- Kotlin プロパティ名をブロックするローカル変数名を使用したときの
UseRequireInsteadOfGet
Lint チェックの誤検出を修正しました。(b/149891163) - レイアウトのプレビューで誤ったコンストラクタを使用しても、
FragmentContainerView
がUnsupportedOperationException
をスローしなくなりました。(b/149707833)
バージョン 1.2.2
バージョン 1.2.2
2020 年 2 月 19 日
androidx.fragment:fragment:1.2.2
、androidx.fragment:fragment-ktx:1.2.2
、androidx.fragment:fragment-testing:1.2.2
がリリースされました。バージョン 1.2.2 に含まれる commit については、こちらをご覧ください。
新しい Lint チェック
- Lint では、
viewLifecycleOwner
をLifecycleOwner
として使用して、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
を使用してobserve
のlivedata-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.1
、androidx.fragment:fragment-ktx:1.2.1
、androidx.fragment:fragment-testing:1.2.1
がリリースされました。バージョン 1.2.1 に含まれる commit については、こちらをご覧ください。
バグの修正
Class
インスタンス(または Kotlin の具体化されたバージョン)を受け取るadd
とreplace
メソッドを介して追加されたフラグメントで、デフォルトのコンストラクタが ProGuard によって保持されるようになりました。(b/148181315)FragmentStatePagerAdapter
とFragmentPagerAdapter
は、finishUpdate()
の実行時にFragmentManager
によってスローされた例外をキャッチしなくなりました。(aosp/1208711)<fragment>
タグによって追加されたフラグメントでFragmentManager.findFragment()
が機能しない問題を修正しました。(b/147784323)<fragment>
タグを使用してインフレートされたフラグメントは、レイアウト内で常にonCreate()
の前にonInflate()
の呼び出しを受け取るようになりました。(aosp/1215856)FragmentManager
インスタンスでtoString()
を呼び出したとき、アクティビティがすでに破棄されている場合にNullPointerException
がスローされなくなりました。(b/148189412)
依存関係の変更
- Fragment
1.2.1
が Lifecycle ViewModel SavedState2.2.0
に依存するようになりました。
バージョン 1.2.0
バージョン 1.2.0
2020 年 1 月 22 日
androidx.fragment:fragment:1.2.0
、androidx.fragment:fragment-ktx:1.2.0
、androidx.fragment:fragment-testing:1.2.0
がリリースされました。バージョン 1.2.0 に含まれる commit については、こちらをご覧ください。
1.1.0 以降の重要な変更
- FragmentContainerView:
FragmentContainerView
は、動的に追加される Fragment に強く推奨されるコンテナです。FrameLayout
または他のレイアウトの使用を置き換えます。<fragment>
タグと同じclass
、android:name
、android:tag
(省略可)もサポートしていますが、<fragment>
で使用するカスタム コードパスの代わりに通常のFragmentTransaction
を使用して、この初期フラグメントを追加します。 onDestroyView()
のタイミング: Fragment が、アニメーションの終了、フレームワークの遷移の終了、AndroidX の遷移の終了を待ってから(Transition1.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 はタグFragmentManager
のLog.isLoggable()
を遵守するようになり、アプリを再コンパイルせずにDEBUG
またはVERBOSE
のログを有効化できるようになりました。
既知の問題
FragmentContainerView
でclass
または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-rc05
、androidx.fragment:fragment-ktx:1.2.0-rc05
、androidx.fragment:fragment-testing:1.2.0-rc05
がリリースされました。バージョン 1.2.0-rc05 に含まれる commit については、こちらをご覧ください。
バグの修正
- アクティビティを破棄する際に
onViewCreated()
が誤って呼び出される原因となっていた、<fragment>
タグ使用時の Fragment1.2.0-rc04
の回帰を修正しました。(b/146290333) <fragment>
タグで追加した Fragment が、レイアウト内にまれにしか存在しない場合でも(横向きレイアウトのみなど)、非設定が正しくクリアされるようになりました。その結果、こうした Fragment はインスタンス化されるのではなく、レイアウト内にない場合でも正しくCREATED
に移動されるようになりました。ただし、ライフサイクル メソッドを介して移動することはありません。(b/145769287)
バージョン 1.2.0-rc04
2019 年 12 月 18 日
androidx.fragment:fragment:1.2.0-rc04
、androidx.fragment:fragment-ktx:1.2.0-rc04
、androidx.fragment:fragment-testing:1.2.0-rc04
がリリースされました。バージョン 1.2.0-rc04 に含まれる commit については、こちらをご覧ください。
バグの修正
- 表示の問題を回避するために、
TRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
、TRANSIT_FRAGMENT_FADE
のアニメーションを調整しました。(b/145468417)
バージョン 1.2.0-rc03
2019 年 12 月 4 日
androidx.fragment:fragment:1.2.0-rc03
、androidx.fragment:fragment-ktx:1.2.0-rc03
、androidx.fragment:fragment-testing:1.2.0-rc03
がリリースされました。バージョン 1.2.0-rc03 に含まれる commit については、こちらをご覧ください。
バグの修正
- 終了アニメーション / 遷移の実行中に、削除された Fragment が
findFragmentById()
/findFragmentByTag()
によって返されるという、意図しない動作の変更を修正しました。(b/143982969、aosp/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 SavedState1.0.0-rc03
、Activity1.1.0-rc03
に依存するようになりました。
バージョン 1.2.0-rc02
2019 年 11 月 7 日
androidx.fragment:fragment:1.2.0-rc02
、androidx.fragment:fragment-ktx:1.2.0-rc02
、androidx.fragment:fragment-testing:1.2.0-rc02
がリリースされました。バージョン 1.2.0-rc02 に含まれる commit については、こちらをご覧ください。
バグの修正
- Kotlin の場合、
onCreateView()
、onViewCreated()
、onActivityCreated()
(Fragment1.2.0-rc01
で導入)のLiveData
を監視する際に、getViewLifecycleOwner()
を使用していた LintFix は、getViewLifecycleOwner()
の代わりに Kotlin のプロパティ アクセス構文viewLifecycleOwner
を使用するようになりました。(aosp/1143821)
バージョン 1.2.0-rc01
2019 年 10 月 23 日
androidx.fragment:fragment:1.2.0-rc01
、androidx.fragment:fragment-ktx:1.2.0-rc01
、androidx.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)
バグの修正
DialogFragment
のonDismiss
コールバックとonCancel
コールバックは、渡されたDialogInterface
が null 以外であり、実行時にgetDialog()
が null 以外を返すことを保証するようになりました。(b/141974033)FragmentContainerView
には、インフレーションの一部としてclass
またはandroid:name
によって定義された Fragment が追加され、直後にfindFragmentById()
とfindFragmentByTag()
が機能できるようになりました。(b/142520327)- 保存中の状態に起因する
FragmentContainerView
のIllegalStateException
が修正されました。(b/142580713) FragmentContainerView
クラスが難読化された場合にFragmentContainerView
で発生するUnsupportedOperationException
の問題を修正しました。(b/142657034)
既知の問題
FragmentContainerView
でclass
またはandroid:name
属性でのみ参照されるフラグメントは、ProGuard によって自動的に保持されないため、フラグメント クラスごとに保持ルールを手動で追加する必要があります。aapt2
でこれが修正されるまでFragmentContainerView
に移行することを提案する Lint ルールを無効にしました。(b/142601969)
バージョン 1.2.0-beta02
2019 年 10 月 11 日
androidx.fragment:fragment:1.2.0-beta02
、androidx.fragment:fragment-ktx:1.2.0-beta02
、androidx.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-beta01
、androidx.fragment:fragment-ktx:1.2.0-beta01
、androidx.fragment:fragment-testing:1.2.0-beta01
がリリースされました。バージョン 1.2.0-beta01 に含まれる commit については、こちらをご覧ください。
新機能
FragmentContainerView
には、初期フラグメントを付加するためのサポートが追加されています。このフラグメントには、android:name
とオプションのandroid:tag
XML 属性のサポートが追加されています。<fragment>
タグとは異なり、FragmentContainerView
は内部で通常のFragmentTransaction
を使用して初期フラグメントを追加し、FragmentContainerView
で他のFragmentTransaction
操作を許可して、レイアウトのビュー バインディングの使用を有効にします。(b/139830628、b/141177981)- フラグメントに Lint 警告が追加され、
<fragment>
をFragmentContainerView
に置き換えるための簡単な修正が提示されるようになりました。(b/139830056)
バグの修正
androidx.transition
の使用時のClassCastException
を修正しました。(b/140680619)- Transition
1.3.0-beta01
を使用している場合、Fragment が、(Fragment1.2.0-alpha03
と Fragment1.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 Test1.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-alpha04
、androidx.fragment-ktx:example:1.2.0-alpha04
、androidx.fragment:fragment-testing:1.2.0-alpha04
がリリースされました。バージョン 1.2.0-alpha04 に含まれる commit については、こちらをご覧ください。
API の変更
Fragment
のgetFragmentManager()
メソッドとrequireFragmentManager()
メソッドのサポートが終了し、単一のgetParentFragmentManager()
メソッドに置き換えられました。このメソッドは、Fragment が追加された null 以外のFragmentManager
を返します(isAdded()
を使用して、呼び出しが安全かどうかを判断できます)。(b/140574496)- 静的
FragmentManager.enableDebugLogging
メソッドのサポートが終了しました。FragmentManager はタグFragmentManager
のLog.isLoggable()
を遵守するようになり、アプリを再コンパイルせずにDEBUG
またはVERBOSE
のログを有効化できるようになりました。(aosp/1116591)
バグの修正
- フラグメントが正常に破棄され、他のフラグメントの終了アニメーションが実行されるようになりました。(b/140574199)
- フラグメントにコンテナがない場合にフラグメントが
Activity.findViewById()
を呼び出す問題を修正しました。(aosp/1116431)
バージョン 1.2.0-alpha03
2019 年 9 月 5 日
androidx.fragment:fragment:1.2.0-alpha03
、androidx.fragment:fragment-ktx:1.2.0-alpha03
、androidx.fragment:fragment-testing:1.2.0-alpha03
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
API の変更
FragmentContainerView
をfinal
に変更(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-alpha02
、androidx.fragment:fragment-ktx:1.2.0-alpha02
、androidx.fragment:fragment-testing:11.2.0-alpha02
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
SavedStateViewModelFactory
は、Fragment
でby viewModels()
、by activityViewModels()
、ViewModelProvider
コンストラクタ、またはViewModelProviders.of()
を使用するときのデフォルト ファクトリになりました。(b/135716331)FragmentTransaction
でsetTransition
とともにTRANSIT_FRAGMENT_OPEN
、TRANSIT_FRAGMENT_CLOSE
、TRANSIT_FRAGMENT_FADE
を使用する場合のデフォルト アニメーションを、Android 10 デバイスのアクティビティで使用されるアニメーションと一致するように更新しました。(aosp/1012812、aosp/1014730)
API の変更
- 動的に追加されるフラグメントに強く推奨されるコンテナとして
FragmentContainerView
を導入し、FrameLayout
などの使用を置き換えます。これにより、アニメーションの Z オーダーの問題と、フラグメントにディスパッチするウィンドウ インセットが修正されます。(b/37036000、aosp/985243、b/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)FragmentTransaction
とFragmentManager.BackStackEntry
のパンくずリストタイトル関連の API はサービスが終了しました。(b/138252944)FragmentTransaction
のsetTransitionStyle
メソッドのサポートが終了しました。(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
から: 現在のアイテムを削除するときにFragmentPagerAdapter
とFragmentStatePagerAdapter
で発生するクラッシュを修正しました。(b/137209870) - Fragment は、
onDestroyView()
をディスパッチする前にアニメーションの終了を待つようになりました。(b/136110528) - 親 Fragment をアニメーション化するときに、子フラグメントとその子孫からのフラグメント アニメーションが適切に処理されるようになりました。(b/116675313)
- 共有要素の遷移を使用し、ポップ操作と追加操作を組み合わせた場合の
NullPointerException
を修正しました。(b/120507394) - Robolectric テストで
FragmentPagerAdapter
とFragmentStatePagerAdapter
を使用している場合に発生するIllegalStateException
の回避策を追加しました。(b/137201343)
バージョン 1.2.0-alpha01
2019 年 7 月 2 日
androidx.fragment:fragment:1.2.0-alpha01
、androidx.fragment:fragment-ktx:1.2.0-alpha01
、androidx.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.0
、androidx.fragment:fragment-ktx:1.1.0
、androidx.fragment:fragment-testing:1.1.0
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
1.0.0 以降の重要な変更
- fragment-testing:
fragment-testing
アーティファクトは、フラグメントを単独でテストするためのFragmentScenario
クラスを提供します。詳細については、アプリのフラグメントをテストするドキュメントをご覧ください。 - FragmentFactory:
FragmentFactory
をFragmentManager
に設定してフラグメント インスタンスの作成を管理できるようになり、引数のないコンストラクタを持つという厳格な要件がなくなりました。 - ViewModels 用 Kotlin プロパティ デリゲート:
fragment-ktx
アーティファクトに、Kotlin プロパティ デリゲートが 2 つ含まれるようになりました。個々のフラグメントに関連付けられた ViewModels にアクセスするためのby viewModels()
と、特定のアクティビティを対象にして ViewModels にアクセスするby activityViewModels()
です。 - 最大 Lifecycle:
FragmentTransaction
でsetMaxLifecycle()
を呼び出すことで、Fragment の最大 Lifecycle 状態を設定できるようになりました。サポート終了となったsetUserVisibleHint()
の代替です。FragmentPagerAdapter
とFragmentStatePagerAdapter
には新しいコンストラクタがあり、これで新しい動作に切り替えられます。 - 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-rc04
、androidx.fragment:fragment-ktx:1.1.0-rc04
、androidx.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-rc03
、androidx.fragment:fragment-ktx:1.1.0-rc03
、androidx.fragment:fragment-testing:1.1.0-rc03
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- タイムアウトを複数回設定して
postponeEnterTransition()
を呼び出しても以前のタイムアウトがキャンセルされない問題を修正しました。(b/137797118)
バージョン 1.1.0-rc02
2019 年 7 月 17 日
androidx.fragment:fragment:1.1.0-rc02
、androidx.fragment:fragment-ktx:1.1.0-rc02
、androidx.fragment-testing:fragment:1.1.0-rc02
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- 現在のアイテムを削除するときに
FragmentPagerAdapter
とFragmentStatePagerAdapter
で発生するクラッシュを修正しました。(b/137209870)
バージョン 1.1.0-rc01
2019 年 7 月 2 日
androidx.fragment:fragment:1.1.0-rc01
、androidx.fragment:fragment-ktx:1.1.0-rc01
、androidx.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-beta01
、androidx.fragment:fragment-ktx:1.1.0-beta01
、androidx.fragment:fragment-testing:1.1.0-beta01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- ネストされた Fragment の
androidx.lifecycle.Lifecycle
コールバック(特にSTARTED
、RESUMED
、PAUSED
、STOPPED
、DESTROYED
関連)が適切にネストされるようになりました。(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-alpha09
、androidx.fragment:fragment-ktx:1.1.0-alpha09
、androidx.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-alpha08
、androidx.fragment:fragment-ktx:1.1.0-alpha08
、androidx.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 - 互換性を破る変更:
FragmentPagerAdapter
とFragmentStatePagerAdapter
のRESUME_ONLY_CURRENT_FRAGMENT
定数とUSE_SET_USER_VISIBLE_HINT
定数の名前を、それぞれBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
とBEHAVIOR_SET_USER_VISIBLE_HINT
に変更しました。aosp/954782
バグの修正
setMaxLifecycle()
によってライフサイクルを制限されていた Fragment は、最終状態に達する前に再開されなくなりました。b/131557151setMaxLifecycle(Lifecycle.State.CREATED)
を使用する場合に、Fragment のビューが適切に破棄されます。aosp/954180
バージョン 1.1.0-alpha07
2019 年 4 月 25 日
androidx.fragment:fragment:1.1.0-alpha07
、androidx.fragment:fragment-ktx:1.1.0-alpha07
、androidx.fragment:fragment-testing:1.1.0-alpha07
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
FragmentTransaction
でsetMaxLifecycle()
を呼び出すことで、Fragment の最大 Lifecycle 状態を設定できるようになりました。サポート終了となったsetUserVisibleHint()
の代替です。FragmentPagerAdapter
とFragmentStatePagerAdapter
には新しいコンストラクタがあり、これで新しい動作に切り替えられます。(b/129780800)
API の変更
FragmentScenario
のmoveToState(STARTED)
は、API レベル 24 以上のデバイスでしか呼び出せなくなりました。(b/129880016)
動作の変更
- (b/129907905)の結果として、ホスティング アクティビティが再作成されるときに、バックスタックのフラグメントは
onCreateView()
へのコールバックを取得しません。onCreateView()
は、フラグメントが表示状態になったとき(つまりバックスタックがポップされたとき)にのみ呼び出されるようになりました。
バグの修正
- XML で
<fragment>
タグを使用する際の問題と、FragmentActivity
またはAppCompatActivity
のcontentLayoutId
コンストラクタを修正しました。(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-alpha06
、androidx.fragment:fragment-ktx:1.1.0-alpha06
、androidx.fragment:fragment-testing:1.1.0-alpha06
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
- FragmentManager によってスローされる例外で、メッセージに Fragment の名前が含まれるようになりました。(b/67759402)
API の変更
Fragment
とFragmentActivity
に、@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-alpha05
、androidx.fragment:fragment-ktx:1.1.0-alpha05
、androidx.fragment:fragment-testing:1.1.0-alpha05
がリリースされました。このバージョンに含まれる commit の完全なリストについては、こちらをご覧ください。
新機能
@ContentView
アノテーション ルックアップがキャッシュされるようになりました(b/123709449)
動作の変更
- 別の FragmentManager にアタッチされた Fragment で
remove()
、hide()
、show()
、detach()
、setPrimaryNavigationFragment()
を呼び出した場合に、エラーが発生せずに失敗するのではなく、IllegalStateException
をスローするようになりました。(aosp/904301)
バグの修正
FragmentActivity
のonNewIntent
が@CallSuper
で正しくマークされるようになりました。(b/124120586)getDialog().dismiss()
またはgetDialog().cancel()
の使用時にDialogFragment
のonDismiss()
が 2 回呼び出されることがある問題を修正しました。(b/126563750)
バージョン 1.1.0-alpha04
2019 年 2 月 7 日
androidx.fragment:fragment 1.1.0-alpha04
、androidx.fragment:fragment-ktx 1.1.0-alpha04
、androidx.fragment:fragment-testing 1.1.0-alpha04
がリリースされました。
新機能
onCreateView()
をオーバーライドする代わりに、どのレイアウト XML ファイルを拡張するかを指定できる@ContentView
クラス アノテーションのサポートが追加されました。onViewCreated()
でビュー関連の処理を行うことをおすすめします。(aosp/837619)fragment-testing
がandroidx.test:core-ktx
1.1.0 安定版に依存するようになりました。(b/121209673)openActionBarOverflowOrOptionsMenu
をFragmentScenario
とともに使用して、Fragment がホストするオプション メニューをテストできるようになりました。(b/121126668)
API の変更
@NonNull Bundle
を返す、またはIllegalStateException
をスローするrequireArguments()
メソッドを追加しました。(b/121196360)getLifecycle()
、getViewLifecycleOwner()
、getViewLifecycleOwnerLiveData()
をオーバーライドすべきでない、今後のリリースで最終版になるという注記が追加されました。現在このメソッドをオーバーライドしている場合は、機能をリクエストしてください(aosp/880714)getViewModelStore()
はオーバーライドすべきでない、今後のリリースで最終版になるという注記が追加されました。現在このメソッドをオーバーライドしている場合は、機能をリクエストしてください(aosp/880713)- Fragment の旧リリースとのバイナリ互換性の問題を修正しました。(aosp/887877)(aosp/889834)
バグの修正
null
をsetTargetFragment()
に渡した場合に、ターゲット フラグメントが正しくクリアされます。(aosp/849969)onDestroy()
またはそれ以降で、ターゲット Fragment を使用できないことがある問題を修正しました。(b/122312935)- DialogFragment の onDismiss() が、
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 または他のカスタムViewModelStoreOwner
をval 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 クラス
- 任意の
FragmentManager
でFragmentFactory
を設定して、新しいフラグメントのインスタンスのインスタンス化方法を管理できるようになりました。 - フラグメントから 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
に依存しています。