Fragment
最新の更新 | 現在の安定版リリース | 次のリリース候補 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2020 年 12 月 16 日 | 1.2.5 | 1.3.0-rc01 | - | - |
依存関係の宣言
フラグメントへの依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
dependencies { def fragment_version = "1.2.5" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing:$fragment_version" }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 1.3.0
バージョン 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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
新しいステート マネージャー
このリリースでは、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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
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
以降: ライフサイクルとビューのライフサイクルが常に同期し、observe
の呼び出しにthis
またはviewLifecycleOwner
を安全に使用できるようにするため、DialogFragment
クラスでFragmentLiveDataObserve
Lint ルールを無効にしました。(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 に含まれるコミットについては、こちらをご覧ください。
新機能
- 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 に含まれるコミットについては、こちらをご覧ください。
新機能
- 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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- フラグメントのライフサイクルの動作が反映され、
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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- 保持されたフラグメントの難読化を許可するように 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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
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 に含まれるコミットについては、こちらをご覧ください。
新しい 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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
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 に含まれるコミットについては、こちらをご覧ください。
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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- アクティビティを破棄する際に
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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- 表示の問題を回避するために、
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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- 終了アニメーション / 遷移の実行中に、削除された 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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- 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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- フラグメントの
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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 に含まれるコミットについては、こちらをご覧ください。
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
新機能
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
を使用して、追加するフラグメントのインスタンスを作成します。具体化された型を使用する 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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
新機能
- 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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- 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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- タイムアウトを複数回設定して
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- 現在のアイテムを削除するときに
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- 遷移の実行中に
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- ネストされた 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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
このリリースは、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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
新機能
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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
新機能
- 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
がリリースされました。このバージョンに含まれるコミットの完全なリストについては、こちらをご覧ください。
新機能
@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
に依存しています。