Fragment
Latest Update | Stable Release | Release Candidate | Beta Release | Alpha Release |
---|---|---|---|---|
October 2, 2024 | 1.8.4 | - | - | - |
Declaring dependencies
To add a dependency on Fragment, you must add the Google Maven repository to your project. Read Google's Maven repository for more information.
Add the dependencies for the artifacts you need in the build.gradle
file for
your app or module:
Groovy
dependencies { def fragment_version = "1.8.4" // 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.4" // 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") }
For more information about dependencies, see Add build dependencies.
Feedback
Your feedback helps make Jetpack better. Let us know if you discover new issues or have ideas for improving this library. Please take a look at the existing issues in this library before you create a new one. You can add your vote to an existing issue by clicking the star button.
See the Issue Tracker documentation for more information.
Version 1.8
Version 1.8.4
October 2, 2024
androidx.fragment:fragment-*:1.8.4
is released. Version 1.8.4 contains these commits.
Bug Fixes
- Fixed an issue where quickly pressing the system back button or quickly doing gesture back will cause Fragments to crash when using Androidx Transitions. (Ibc038, b/364804225)
- Fixed an issue in fragments where interrupting a predictive back gesture would send the fragment manager into an undefined state and even up showing the wrong fragment. (If82e2, b/338624457)
- Fixed an
UninitializedPropertyAccessException
inAndroidFragment
when dynamically swapping out the Class yourAndroidFragment
instance is using. (I12dea)
Version 1.8.3
September 4, 2024
androidx.fragment:fragment-*:1.8.3
is released. Version 1.8.3 contains these commits.
Bug Fixes
FragmentManager
now correctly takes into account pending operations when handling the Predictive Back gesture. This should ensure that doing a system back no longer causes anIndexOutOfBoundsException
. (I9ba32, b/342316801)AndroidFragment
no longer crashes if it is added to composition while the containing activity/fragment's state is already saved. (I985e9, b/356643968)
Version 1.8.2
July 24, 2024
androidx.fragment:fragment-*:1.8.2
is released. Version 1.8.2 contains these commits.
Bug Fixes
AndroidFragment
now properly handles cases where the parent fragment is put on the Fragment back stack, avoiding 'No view found for id' issues when popping back to that fragment. (I94608)- Fragments added via the
FragmentTransaction.add
method that takes aViewGroup
now wait foronContainerAvailable
before progressing toonStart()
. This affects users of that API, such asAndroidFragment
, which now waits for theAndroidFragment
to re-enter composition before moving it throughonStart()
. (I94608)
Version 1.8.1
June 26, 2024
androidx.fragment:fragment-*:1.8.1
is released. Version 1.8.1 contains these commits.
Bug Fixes
- Fixed an issue where fragments without a container were immediately
DESTROYED
when starting a predictive back gesture. Now they are held in theCREATED
state until after the gesture is complete. (If6b83, b/345244539)
Version 1.8.0
June 12, 2024
androidx.fragment:fragment-*:1.8.0
is released. Version 1.8.0 contains these commits.
Important changes since 1.7.0
- The
fragment-compose
artifact now contains anAndroidFragment
Composable
that allows adding fragments into the Compose hierarchy via the fragment class name. It automatically handles the saving and restoring of the Fragment’s state. This should be used as a direct replacement for the previously recommended approach of usingAndroidViewBinding
to inflate a Fragment. - The
onBackStackChangeCancelled
callback on theFragmentManager
’sOnBackStackChangedListener
interface now fires as part of executing operations inFragmentManager
, moving it closer in line with the timing of theonBackStackChangeCommitted
callback.
Version 1.8.0-rc01
May 29, 2024
androidx.fragment:fragment-*:1.8.0-rc01
is released. Version 1.8.0-rc01 contains these commits.
Bug Fixes
- The
onBackStackChangeCancelled
callback on theFragmentManagers OnBackStackChangedListener
interface now fires as part of executing operations inFragmentManager
, moving it closer in line with the timing of theonBackStackChangeCommitted
callback. (I5ebfb, b/332916112)
Version 1.8.0-beta01
May 14, 2024
androidx.fragment:fragment-*:1.8.0-beta01
is released. Version 1.8.0-beta01 contains these commits.
Bug Fixes
- From Fragment
1.7.1
: Predictive back will now only run for transactions in which all of the fragments have either a Animator or a Seekable Androidx Transition. This fixes an issue where canceling a partially seekable transaction would cause a black screen. (I43037, b/339169168)
Version 1.8.0-alpha02
April 17, 2024
androidx.fragment:fragment-*:1.8.0-alpha02
is released. Version 1.8.0-alpha02 contains these commits.
Bug Fixes
- From Fragment
1.7.0-rc02
: Added logs to indicate why setting asharedElement
without any other transitions will fail to run. (Iec48e) - From Fragment
1.7.0-rc02
: Fixed a bug where if a non-seekable shared element was added to a transactions where all other transitions were seekable, there would be a crash. Now the transaction will correctly be considered non-seekable. (I18ccd)
Version 1.8.0-alpha01
April 3, 2024
androidx.fragment:fragment-*:1.8.0-alpha01
is released. Version 1.8.0-alpha01 contains these commits.
New Features
- The new
AndroidFragment
Composable
allows adding fragments into the Compose hierarchy via the fragment class name. It automatically handles the saving and restoring of the Fragment’s state. This can be used as a direct replacement for the AndroidViewBindingComposable
.(b/312895363, Icf841)
Documentation Changes
- Updated documentation for the
OnBackStackChangedListener
APIs to indicate when they are called and how they should be used. (I0bfd9)
Dependency update
- Fragment now depends on Profile Installer 1.3.1.
Version 1.7
Version 1.7.1
May 14, 2024
androidx.fragment:fragment-*:1.7.1
is released. Version 1.7.1 contains these commits.
Bug Fixes
- Predictive back will now only run for transactions in which all of the fragments have either a Animator or a Seekable Androidx Transition. This fixes an issue where canceling a partially seekable transaction would cause a blank screen. (I43037, b/339169168)
Version 1.7.0
May 1, 2024
androidx.fragment:fragment-*:1.7.0
is released. Version 1.7.0 contains these commits.
Predictive Back Gesture Support
- Fragments now provide support for Predictive in-app back when using
Animator
or when using AndroidX Transition 1.5.0. This allows users to use the back gesture to see the previous fragment by seeking your Animator/Transition before deciding to either commit the transaction via completing the gesture or canceling.
Transition System | XML Resource | Supports Predictive Back |
---|---|---|
Animation |
R.anim |
No |
Animator |
R.animator |
Yes |
Framework Transition |
R.transition |
No |
AndroidX Transition with Transition 1.4.1 or less |
R.transition |
No |
AndroidX Transition with Transition 1.5.0 |
R.transition |
Yes |
If you see any issues with Predictive Back support in Fragments after you’ve opted into the predictive back gesture, please file an issue against Fragment with a sample project that reproduces your issue. You can disable predictive back by using FragmentManager.enabledPredictiveBack(false)
in the onCreate()
of your Activity.
FragmentManager.OnBackStackChangedListener()
now provides the onBackStackChangeProgressed()
and onBackStackChangeCancelled()
for receiving predictive back progress and canceled events respectively.
Fragment Compose Artifact
A new fragment-compose
artifact has been created that focuses on supporting apps that are in the process of moving from a Fragment based architecture to a fully Compose based architecture.
The first feature available in this new artifact is a content
extension method on Fragment
that seeks to make it easier to use Compose for the UI of an individual Fragment by creating a ComposeView
for you and setting the correct ViewCompositionStrategy
.
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)
}
}
Version 1.7.0-rc02
April 17, 2024
androidx.fragment:fragment-*:1.7.0-rc02
is released. Version 1.7.0-rc02 contains these commits.
Bug Fixes
- Added logs to indicate why setting a
sharedElement
without any other transitions will fail to run. (Iec48e) - Fixed a bug where if a non-seekable shared element was added to a transactions where all other transitions were seekable, there would be a crash. Now the transaction will correctly be considered non-seekable. (I18ccd)
Version 1.7.0-rc01
April 3, 2024
androidx.fragment:fragment-*:1.7.0-rc01
is released. Version 1.7.0-rc01 contains these commits.
Dependency update
- Fragment now depends on Profile Installer 1.3.1.
Version 1.7.0-beta01
March 20, 2024
androidx.fragment:fragment-*:1.7.0-beta01
is released. Version 1.7.0-beta01 contains these commits.
API Changes
FragmentHostCallback
is now written in Kotlin so that the nullability of the generic type of the Host matches the nullability of the return type ofonGetHost()
. (I40af5)
Bug Fixes
- Fixed an issue where when committing a Predictive Back gesture on a fragment that is not in a container, that fragment would never be destroyed. The Fragment will now be immediately moved to the final state. (Ida0d9)
- Fixed an issue in Fragments where interrupting incoming transitions with a Predictive back gesture would destroy the entering view, and leave a blank screen. (Id3f22, b/319531491)
Version 1.7.0-alpha10
February 7, 2024
androidx.fragment:fragment-*:1.7.0-alpha10
is released. Version 1.7.0-alpha10 contains these commits.
Bug Fixes
- Fixed the known issue in the previous Fragment release where using Fragment's Predictive Back support for
Animator
or AndroidX Transition, Fragments would throw aNullPointerException
fromhandleOnBackProgressed
if noFragmentManager.OnBackStackChangedListener
has ever been added viaaddOnBackStackChangedListener
. (I7c835)
Version 1.7.0-alpha09
January 24, 2024
androidx.fragment:fragment-*:1.7.0-alpha09
is released. Version 1.7.0-alpha09 contains these commits.
Fragment Compose Artifact
A new fragment-compose
artifact has been created that focuses on supporting apps that are in the process of moving from a Fragment based architecture to a fully Compose based architecture.
The first feature available in this new artifact is a content
extension method on Fragment
that seeks to make it easier to use Compose for the UI of an individual Fragment by creating a ComposeView
for you and setting the correct ViewCompositionStrategy
. (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)
}
}
New Features
FragmentManager.OnBackStackChangedListener()
now provides theonBackStackChangeProgressed()
andonBackStackChangeCancelled()
for receiving predictive back progress and canceled events respectively. (214b87)
Known Issue
- When using Fragment's Predictive Back support for
Animator
or AndroidX Transition, Fragments will throw aNullPointerException
fromhandleOnBackProgressed
if noFragmentManager.OnBackStackChangedListener
has ever been added viaaddOnBackStackChangedListener
. Manually adding a listener will work around the crash. A fix will be available for this in the next release of Fragments.
Version 1.7.0-alpha08
January 10, 2024
androidx.fragment:fragment-*:1.7.0-alpha08
is released. Version 1.7.0-alpha08 contains these commits.
Clean up
- Removed workaround for Transition library that has been fixed in Transition
1.5.0-alpha06
. (I04356)
Version 1.7.0-alpha07
November 29, 2023
androidx.fragment:fragment-*:1.7.0-alpha07
is released. Version 1.7.0-alpha07 contains these commits.
Bug Fixes
- Fixed a
NullPointerException
caused by setting a shared element transition and failing to set an enter/exitTransition as well. (I8472b) - From Fragment
1.6.2
: When the Fragment of aFragmentContainerView
is inflated, its states such asFragmentManager
, Host, and id are now accessible in theonInflate
callback. (I1e44c, b/307427423) - From Fragment
1.6.2
: When usingclearBackStack
to remove a set of fragments, any nested Fragment'sViewModel
will now be cleared when the parent fragment’sViewModels
are cleared. (I6d83c, b/296173018)
Version 1.7.0-alpha06
October 4, 2023
androidx.fragment:fragment-*:1.7.0-alpha06
is released. Version 1.7.0-alpha06 contains these commits.
Dependency Update
- Fragments has been updated to depend on the new
animateToStart
API added in Transition1.5.0-alpha04
.
Version 1.7.0-alpha05
September 20, 2023
androidx.fragment:fragment-*:1.7.0-alpha05
is released. Version 1.7.0-alpha05 contains these commits.
New Features
- Fragments now provide support for Predictive back when using Androidx Transitions. This allows you to use the back gesture to seek to the previous fragment with your custom Androidx Transition before deciding to either commit or cancel the transaction via the completed gesture. You must depend on the Transition
1.5.0-alpha03
release to enable this feature. (Ib49b4, b/285175724)
Known Issues
- There is currently an issue where after you cancel a back gesture with a transition once, the next time you start the back gesture it will fail to run the transition, causing a blank screen. This could be caused by an issue in the Transition library. (b/300157785). If you see this issue, please file an issue against Fragment with a sample project that reproduces your issue. You can disable predictive back by using
FragmentManager.enabledPredictiveBack(false)
in theonCreate()
of your Activity.
Version 1.7.0-alpha04
September 6, 2023
androidx.fragment:fragment-*:1.7.0-alpha04
is released. Version 1.7.0-alpha04 contains these commits.
Bug Fixes
- Fixed an issue when canceling a predictive back gesture where fragments failed to make it to the correct Lifecycle state. (I7cffe, b/297379023)
- Fixed a regressions where Animations were allowed to run with Transitions. (I59f36)
- Fixed an issue when using Predictive Back with fragments where attempting to go back twice in quick succession on the second to last fragment on the back stack would cause a crash. (Ifa1a4)
Version 1.7.0-alpha03
August 23, 2023
androidx.fragment:fragment-*:1.7.0-alpha03
is released. Version 1.7.0-alpha03 contains these commits.
Bug Fixes
- Fixed an issue with Fragments when using predictive back that caused the first fragment in the fragment manager’s back stack to be skipped and the Activity to finish when using system back via 3 button navigation or the predictive back gesture. (I0664b, b/295231788)
Version 1.7.0-alpha02
August 9, 2023
androidx.fragment:fragment-*:1.7.0-alpha02
is released. Version 1.7.0-alpha02 contains these commits.
Bug Fixes
- When using Fragments with Predictive Back Gestures from API 34, if you are using a transition system that does not support seeking (
Animations
,Transitions
) or no transitions at all, Fragments will now wait until the gesture is complete before executing the back action. (I8100c)
Version 1.7.0-alpha01
June 7, 2023
androidx.fragment:fragment-*:1.7.0-alpha01
is released. This version is developed in an internal branch.
New Features
- Fragments now provide support for Predictive in-app back when using
Animator
. This allows you to use the back gesture to see the previous fragment with your custom Animator before deciding to either commit the transaction via the completed gesture or cancel. You can also disable this new behavior by using the experimentalenablePredictiveBack()
and passing infalse
.
Version 1.6
Version 1.6.2
November 1, 2023
androidx.fragment:fragment-*:1.6.2
is released. Version 1.6.2 contains these commits.
Bug Fixes
- When the Fragment of a
FragmentContainerView
is inflated, its states such asFragmentManager
, Host, and id are now accessible in theonInflate
callback. (I1e44c, b/307427423) - When using
clearBackStack
to remove a set of fragments, any nested Fragment'sViewModel
will now be cleared when the parent fragment’sViewModels
are cleared. (I6d83c, b/296173018)
Version 1.6.1
July 26, 2023
androidx.fragment:fragment-*:1.6.1
is released. Version 1.6.1 contains these commits.
Bug Fixes
- Fixed an issue where the saved state stored when the activity was stopped but not destroyed would be incorrectly cached even after the fragment instance was moved back to the
RESUMED
state. This would cause that cached state to be reused if that fragment instance was on the back stack when using the multiple back stacks API to save and restore that fragment. (I71288, b/246289075)
Dependency Update
- Fragment now depends on Activity 1.7.2. This fixes an issue where Kotlin users could not extend
ComponentDialog
without an explicit dependency on Activity. (b/287509323)
Version 1.6.0
June 7, 2023
androidx.fragment:fragment-*:1.6.0
is released. Version 1.6.0 contains these commits.
Important changes since 1.5.0
- The saved state of
Fragment
s has been split entirely between private library state (customParcelable
classes) and state provided by the developer, which is now always stored in aBundle
that allows determining exactly where a fragment’s state is originating. - The
FragmentManager.OnBackStackChangedListener
interface has been expanded with two additional callbacks ofonBackStackChangeStarted
andonBackStackChangeCommitted
that are called with eachFragment
right before they are added/removed from the fragment back stack and right after the transaction is committed, respectively. FragmentStrictMode
added a newWrongNestedHierarchyViolation
that detects when a child fragment is nested within it’s parent’s View hierarchy, but not added to the parent’schildFragmentManager
.- The
Fragment
andFragmentManager
APIs that take anIntent
orIntentSender
are now properly annotated with@NonNull
to prevent passing in a null value as a null value would always immediately crash the respective android framework APIs these methods call into. DialogFragment
now provides access to underlyingComponentDialog
via therequireComponentDialog()
API.- Fragment now depends on Lifecycle
2.6.1
. - Fragment now depends on SavedState
1.2.1
. - Fragment now depends on ProfileInstaller
1.3.0
. The
fragment-testing-manifest
artifact separates out the manifest entries from the rest of the fragment-testing components. This means you can do the following:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
This avoids conflicts due to version skew between
fragment-testing
andandroidx.test
Version 1.6.0-rc01
May 10, 2023
androidx.fragment:fragment-*:1.6.0-rc01
is released. Version 1.6.0-rc01 contains these commits.
Bug Fixes
- Fixed as issue causing
ActivityResult
s to be sent with the incorrect request code when multiplestartActivityForResult
requests have been made consecutively. (If0b9d, b/249519359) - Fixed an issue where the
onBackStackChangeListener
callbacks were being dispatched for transactions that did not actually change the back stack if they were mixed in with transactions that do. (I0eb5c, b/279306628)
Version 1.6.0-beta01
April 19, 2023
androidx.fragment:fragment-*:1.6.0-beta01
is released. Version 1.6.0-beta01 contains these commits.
Bug Fixes
- Using
postponeEnterTransition
with a timeout and then replacing the postponed fragment no longer results in leaking the postponed fragment. (I2ec7d, b/276375110) - The new
onBackStackChangeStarted
andonBackStackChangeCommitted
callbacks will now only dispatch a fragment a single time, even if multiple transactions contain the same fragment. (Ic6b69)
Version 1.6.0-alpha09
April 5, 2023
androidx.fragment:fragment-*:1.6.0-alpha09
is released. Version 1.6.0-alpha09 contains these commits.
API Changes
DialogFragment
now provides access to underlyingComponentDialog
via therequireComponentDialog()
API. (I022e3, b/234274777)- The fragment
commitNow()
,executePendingTransactions()
, andpopBackStackImmediate()
APIs have been annotated with@MainThread
meaning they will now all throw build errors when they are not called from the main thread instead of waiting to fail at runtime. (Ic9665, b/236538905)
Bug Fixes
- Fixed a bug in
FragmentManager
where saving and restoring in the same frame could cause a crash. (Ib36af, b/246519668) OnBackStackChangedListener
onBackStackChangeStarted
andonBackStackChangeCommitted
callbacks now only execute when theFragmentManager
back stack is changed. (I66055, b/274788957)
Version 1.6.0-alpha08
March 22, 2023
androidx.fragment:fragment-*:1.6.0-alpha08
is released. Version 1.6.0-alpha08 contains these commits.
Behavior Change
- The timing of the
OnBackStackChangedListener.onBackStackChangeCommited
callback has been adjusted to execute before fragment operations are executed. This ensures that the callback will never be passed a fragment that is detached. (I66a76, b/273568280)
Bug Fixes
- From Fragment
1.5.6
: Fixed an issue where callingclearFragmentResultListener
inside asetFragmentResultListener
wouldn't work if theLifecycle
was alreadySTARTED
and a result was already available. (If7458)
Dependency Updates
- Fragment now depends on Lifecycle
2.6.1
. (586fe7) - Fragment now depends on SavedState
1.2.1
. (078e4e) - Fragment now depends on ProfileInstaller
1.3.0
. (3fc05b)
Version 1.6.0-alpha07
March 8, 2023
androidx.fragment:fragment-*:1.6.0-alpha07
is released. Version 1.6.0-alpha07 contains these commits.
Bug Fixes
- From Fragment
1.5.6
: Fixed an issue where the removal of any Fragment, whether it had added Menu items or not, would invalidate the activity's menu. (50f098, b/244336571)
Version 1.6.0-alpha06
February 22, 2023
androidx.fragment:fragment-*:1.6.0-alpha06
is released. Version 1.6.0-alpha06 contains these commits.
Behavior change
- The new
onBackStackChangedStarted
callback onFragmentManager
'sonBackStackChangedListener
will now be executed before fragments begin to move to their target states. (I34726)
Version 1.6.0-alpha05
February 8, 2023
androidx.fragment:fragment-*:1.6.0-alpha05
is released. Version 1.6.0-alpha05 contains these commits.
New Features
- The
FragmentManager.OnBackStackChagnedListener
interface now offers two additional callbacks,onBackStackChangeStarted
andonBackStackChangeCommitted
, that allow for additional information and control when back stack changes occur in theFragmentManager
. (Ib7ce5, b/238686802)
API Changes
- The
Fragment
andFragmentManager
APIs that take anIntent
orIntentSender
are now properly annotated with@NonNull
to prevent passing in a null value as a null value would always immediately crash the respective Android framework APIs these methods call into. (I06fd4)
Version 1.6.0-alpha04
December 7, 2022
androidx.fragment:fragment-*:1.6.0-alpha04
is released. Version 1.6.0-alpha04 contains these commits.
New Features
FragmentStrictMode
added a newWrongNestedHierarchyViolation
that detects when a child fragment is nested within it’s parent’s View hierarchy, but not added to the parent’schildFragmentManager
. (I72521, b/249299268)
Behavior Changes
- Fragments now restore their
SavedStateRegistry
state beforeonAttach()
, ensuring that it is available from all upward lifecycle methods. (I1e2b1)
API Changes
- The
fragment-testing-manifest
artifact separates out the manifest entries from the rest of the fragment-testing components. This means you can do the following:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
This avoids conflicts due to version skew between fragment-testing
and androidx.test
.(I8e534, b/128612536)
Bug Fixes
- From Fragment
1.5.5
: Fragments will no longer incorrectly save theViewModel
state as part of the view registry saved state. (I10d2b, b/253546214)
Version 1.6.0-alpha03
October 5, 2022
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
, and androidx.fragment:fragment-testing:1.6.0-alpha03
are released. Version 1.6.0-alpha03 contains these commits.
API Changes
- Classes extending
DialogFragment
will now be required to call super in theironDismiss()
overrides. (I14798, b/238928865)
Bug Fixes
- Fixed regressions caused by the integration of the new provider callback interfaces (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) to ensure that fragments always get the proper callbacks. (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
Version 1.6.0-alpha02
August 24, 2022
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
, and androidx.fragment:fragment-testing:1.6.0-alpha02
are released. Version 1.6.0-alpha02 contains these commits.
Bug Fixes
- From Fragment
1.5.2
: Fixed an issue where executing apopBackStack()
and areplace()
transaction at the same time could cause exiting fragments to run the wrongAnimation
/Animator
. (Ib1c07, b/214835303)
Version 1.6.0-alpha01
July 27, 2022
androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
, and androidx.fragment:fragment-testing:1.6.0-alpha01
are released. Version 1.6.0-alpha01 contains these commits.
Behavior Changes
- The saved state of
Fragment
s has been split entirely between private library state (customParcelable
classes) and state provided by the developer, which is now always stored in aBundle
that allows determining exactly where a fragment’s state is originating. (b/207158202)
Bug Fixes
- From Fragment
1.5.1
: Fix a regression in theDialogFragmentCallbacksDetector
where using the lint version bundled with AGP 7.4 would cause lint to crash. (b/237567009)
Dependency update
- From Fragment
1.5.1
: The Fragment library now depends on the Lifecycle2.5.1
. (Id204c) - From Fragment
1.5.1
: The Fragment library now depends on Activity1.5.1
. (I10f07)
Version 1.5
Version 1.5.7
April 19, 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
, and androidx.fragment:fragment-testing:1.5.7
are released. Version 1.5.7 contains these commits.
Bug Fixes
- Using
postponeEnterTransition
with a timeout and then replacing the postponed fragment no longer results in leaking the postponed fragment. (I2ec7d, b/276375110)
Version 1.5.6
March 22, 2023
androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
, and androidx.fragment:fragment-testing:1.5.6
are released. Version 1.5.6 contains these commits.
Bug Fixes
- Fixed an issue where the removal of any Fragment, whether it had added Menu items or not, would invalidate the activity's menu. (50f098, b/244336571)
- Fixed an issue where calling
clearFragmentResultListener
inside asetFragmentResultListener
wouldn't work if theLifecycle
was alreadySTARTED
and a result was already available. (If7458)
Version 1.5.5
December 7, 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
, and androidx.fragment:fragment-testing:1.5.5
are released. Version 1.5.5 contains these commits.
Bug Fixes
- Fragments will no longer incorrectly save the
ViewModel
state as part of the view registry saved state. (I10d2b, b/253546214)
Version 1.5.4
October 24, 2022
androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
, and androidx.fragment:fragment-testing:1.5.4
are released. Version 1.5.4 contains these commits.
Bug Fixes
- Fixed an error where using a custom
FragmentController
with a host that does not implement a provider callback interface (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) and calling its deprecated dispatch function would fail to dispatch to child fragments. (I9b380)
Version 1.5.3
September 21, 2022
androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
, and androidx.fragment:fragment-testing:1.5.3
are released. Version 1.5.3 contains these commits.
Bug Fixes
- Fixed an error that caused fragments on the back stack to get
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
, andonConfigurationChanged()
callbacks. (I34581, I8dfe6, b/242570955) - Nested child fragments will no longer receive multiple
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
, oronConfigurationChanged()
callbacks. (I690b3, Id0096, If9d6b, I2cba2)
Version 1.5.2
August 10, 2022
androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
, and androidx.fragment:fragment-testing:1.5.2
are released. Version 1.5.2 contains these commits.
Bug Fixes
- Fixed an issue where executing a
popBackStack()
and areplace()
transaction at the same time could cause exiting fragments to run the wrongAnimation
/Animator
. (Ib1c07, b/214835303)
Version 1.5.1
July 27, 2022
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
, and androidx.fragment:fragment-testing:1.5.1
are released. Version 1.5.1 contains these commits.
Bug Fixes
- Fix a regression in the
DialogFragmentCallbacksDetector
where using the lint version bundled with AGP 7.4 would cause lint to crash. (b/237567009)
Dependency update
- The Fragment library now depends on the Lifecycle
2.5.1
. (Id204c) - The Fragment library now depends on Activity
1.5.1
. (I10f07)
Version 1.5.0
June 29, 2022
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
, and androidx.fragment:fragment-testing:1.5.0
are released. Version 1.5.0 contains these commits.
Important changes since 1.4.0
- CreationExtras Integration -
Fragment
now has the ability to provide a statelessViewModelProvider.Factory
via Lifecycle2.5.0
’sCreationExtras
. - Component Dialog Integration -
DialogFragment
now usesComponentDialog
via Activity1.5.0
as the default dialog returned byonCreateDialog()
. - Saved Instance State Refactoring - Fragments have begun to change the way they save their instance state. This is an effort to help clearly identify what state has been saved in the fragment and the source of the state. The current changes include the following:
FragmentManager
now saves its saved instance state into aBundle
instead of directly in a customParcelable
.- Results set via the
Fragment Result APIs
that have not yet been delivered are now saved separately from the internal state of theFragmentManager
. - The state associated with each individual fragment is now saved separately from the internal state of the
FragmentManager
, thus allowing you to correlate the amount of saved state associated with an individual fragment with the unique IDs present in theFragment
debug logging.
Other Changes
FragmentStrictMode
now offers the ability for private third-party fragments to bypass specific violation penalties by usingallowViolation()
with the class name.- The Fragment APIs for providing a menu to your activity’s
ActionBar
have been deprecated. TheMenuHost
andMenuProvider
APIs added in Activity1.4.0
provide a testable, lifecycle aware equivalent API surface that fragments should use.
Version 1.5.0-rc01
May 11, 2022
androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
, and androidx.fragment:fragment-testing:1.5.0-rc01
are released. Version 1.5.0-rc01 contains these commits.
Saved Instance State Refactoring
- The state associated with each individual fragment is now saved separately from the internal state of the
FragmentManager
, thus allowing you to correlate the amount of saved state associated with an individual fragment with the unique IDs present in the Fragment debug logging. (a153e0, b/207158202)
Version 1.5.0-beta01
April 20, 2022
androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
, and androidx.fragment:fragment-testing:1.5.0-beta01
are released. Version 1.5.0-beta01 contains these commits.
API Changes
DialogFragment
has added a newdismissNow
method that usescommitNow
for parity with theshowNow
function. Note that this will not make theDialog
be dismissed immediately, it will only synchronously update the state of theFragmentManager
. (I15c36, b/72644830)
Saved Instance State Refactoring
FragmentManager
now saves its saved instance state into aBundle
instead of directly in a customParcelable
. This is the first step in providing additional transparency into what is actually being saved by Fragments. (I93807, b/207158202)- Results set via the Fragment Result APIs that have not yet been delivered are now saved separately from the internal state of the
FragmentManager
. This will allow for additional transparency into what results are being saved as part of your saved instance state. (I6ea12, b/207158202)
Version 1.5.0-alpha05
April 6, 2022
androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
, and androidx.fragment:fragment-testing:1.5.0-alpha05
are released. Version 1.5.0-alpha05 contains these commits.
API Changes
Fragment
'ssetHasOptionsMenu()
has been deprecated. To manage menus and their menu items, the new menu APIs should be used instead as per the Fragment1.5.0-alpha04
release notes. (I7b4b4, b/226438239)
Version 1.5.0-alpha04
March 23, 2022
androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
, and androidx.fragment:fragment-testing:1.5.0-alpha04
are released. Version 1.5.0-alpha04 contains these commits.
API Changes
- The Fragment APIs for providing a menu to your activity’s
ActionBar
have been deprecated as they tightly couple your fragment to your activity and are not testable in isolation. TheMenuHost
andMenuProvider
APIs added in Activity1.4.0-alpha01
provide a testable, lifecycle aware equivalent API surface that fragments should use. (I50a59, I20758)
Bug Fixes
SavedStateViewFactory
now supports usingCreationExtras
even when it was initialized with aSavedStateRegistryOwner
. If extras are provided, the initialized arguments are ignored. (I6c43b, b/224844583)
Version 1.5.0-alpha03
February 23, 2022
androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
, and androidx.fragment:fragment-testing:1.5.0-alpha03
are released. Version 1.5.0-alpha03 contains these commits.
API Changes
- You can now pass
CreationExtras
to theby viewModels()
andby activityViewModels()
functions. (Ibefe7, b/217601110)
Behavior Changes
DialogFragment
now usesComponentDialog
as the default dialog returned byonCreateDialog()
. (If3784, b/217618170)
Version 1.5.0-alpha02
February 9, 2022
androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
, and androidx.fragment:fragment-testing:1.5.0-alpha02
are released. Version 1.5.0-alpha02 contains these commits.
New Features
FragmentStrictMode
now offers the ability for private third-party fragments to bypass specific violation penalties by usingallowViolation()
with the class name. (I8f678)
Version 1.5.0-alpha01
January 26, 2022
androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
, and androidx.fragment:fragment-testing:1.5.0-alpha01
are released. Version 1.5.0-alpha01 contains these commits.
New Features
Fragment
now integrates with ViewModel CreationExtras, introduced as part of Lifecycle2.5.0-alpha01
. (I3060b, b/207012585)
Bug Fixes
- From Fragment
1.4.1
:FragmentContainerView
no longer throws an illegal state exception when view IDs generated from xml have negative values. (Ic185b, b/213086140) - From Fragment
1.4.1
: When using a customownerProducer
lambda with theby viewModels()
lazy function, it will now use thedefaultViewModelProviderFactory
from that owner if a customViewModelProvider.Factory
is not provided instead of always using the fragment's factory. (I56170, b/214106513) - Fixed a crash when accessing a
ViewModel
for the very first time from aregisterForActivityResult()
callback of aFragment
. (Iea2b3)
Version 1.4
Version 1.4.1
January 26, 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
, and androidx.fragment:fragment-testing:1.4.1
are released. Version 1.4.1 contains these commits.
Bug Fixes
FragmentContainerView
no longer throws an illegal state exception when view IDs generated from xml have negative values. (Ic185b, b/213086140)- When using a custom
ownerProducer
lambda with theby viewModels()
lazy function, it will now use thedefaultViewModelProviderFactory
from that owner if a customViewModelProvider.Factory
is not provided instead of always using the fragment's factory. (I56170, b/214106513)
Version 1.4.0
November 17, 2021
androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
, and androidx.fragment:fragment-testing:1.4.0
are released. Version 1.4.0 contains these commits.
Important changes since 1.3.0
- The
FragmentStrictMode
APIs provide runtime checks that allow you to verify that your app or libraries you depend on are not calling deprecated fragment APIs. When a violation is detected, you can choose to print a log message, trigger your own custom listener, or crash your app. TheFragmentStrictMode.Policy
that controls what checks are enabled and what “penalties” are triggered can be set on aFragmentManager
via the newsetStrictModePolicy()
method. That policy applies to thatFragmentManager
and transitively to any child fragment managers that do not set their own unique policy. See StrictMode for fragments. FragmentContainerView
now provides agetFragment()
method which returns the fragment that was most recently added to the container. This uses the same logic asfindFragmentById()
with the ID of theFragmentContainerView
, but allows chaining the call.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
now implementsCloseable
, allowing you to use it with Kotlin’suse
method or try-with-resources.Added
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
to specify whether to enable the standard Activity-transition animation taken from your theme in Fragments transition.The experimental API of
FragmentManager.enableNewStateManager(boolean)
has been removed and the new state manager is now the only option available.
Multiple back stacks
The FragmentManager
maintains a back stack made up of fragment transactions that used addToBackStack()
. This allows you to pop those transactions and return to the previous state, using the mechanisms for Saving state with fragments to allow your fragments to restore their state appropriately.
This release expands on these mechanisms by providing three new FragmentManager
APIs: saveBackStack(String name)
, restoreBackStack(String name)
, and clearBackStack(String name)
. These APIs use the same name
as addToBackStack()
to save the state of the FragmentTransaction
and the state of every fragment that was added in those transactions and allow you to later restore those transactions and their fragments with their state in tact. This allows you to effectively ‘swap’ between multiple back stacks by saving the current back stack and restoring a saved back stack.
saveBackStack()
operates similarly to popBackStack()
in that it is asynchronous and results in all the fragment transactions back to that specific name to be reversed (‘popped’) and any added fragments to be destroyed and removed, but it differs in a few important ways:
saveBackStack()
is always inclusive.- Unlike
popBackStack()
which will pop all transactions on the back stack if the specified name is not found on the back stack or if a null name is provided,saveBackStack()
does nothing if you haven’t previously committed a fragment transaction usingaddToBackStack()
with that exact, non-null name. - The state of all fragments added from those transactions is saved. This means that the View state of every fragment is stored,
onSaveInstanceState()
of every fragment is called and that state is restored, and anyViewModel
instances associated with those fragments are retained (andonCleared()
is not called on them).
The fragment transactions that can be used with saveBackStack()
must meet certain criteria:
- Every fragment transaction must use
setReorderingAllowed(true)
to ensure the transactions can be restored as a single, atomic operation. - The set of transactions saved must be self-contained (i.e., they must not explicitly reference any fragments outside of that set of transactions) to ensure that they can be restored at any later time, no matter what changes have been made to the back stack in the intervening time.
- No fragment that is saved can be a retained fragment or have a retained fragment in their transitive set of child fragments to ensure that the
FragmentManager
does not return any references to saved fragments after the back stack is saved.
Similar to saveBackStack()
, restoreBackStack()
and clearBackStack()
, which would restore a previously saved back stack or clear a previously saved back stack, respectively, both do nothing if you have not previously called saveBackStack()
with the same name.
For more information, see Multiple back stacks: A deep dive.
Version 1.4.0-rc01
November 3, 2021
androidx.fragment:fragment:1.4.0-rc01
released with no changes from Fragment 1.4.0-beta01. Version 1.4.0-rc01 contains these commits.
Version 1.4.0-beta01
October 27, 2021
androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
, and androidx.fragment:fragment-testing:1.4.0-beta01
are released. Version 1.4.0-beta01 contains these commits.
Bug Fixes
- Parent fragments will now dispatch
onHiddenChanged()
down their entire hierarchy before launching their own callback. (Iedc20, b/77504618) - The keyboard will now close automatically when going from a fragment with an open keyboard to a fragment with a recycler view. (I8b842, b/196852211)
DialogFragment
now usessetReorderingAllowed(true)
for all transactions it creates when you callshow()
,showNow()
, ordismiss()
. (Ie2c14)- The extremely long Lint warning of
DetachAndAttachFragmentInSameFragmentTransaction
has been shortened toDetachAndAttachSameFragment
. (e9eca3)
Version 1.4.0-alpha10
September 29, 2021
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
, and androidx.fragment:fragment-testing:1.4.0-alpha10
are released. Version 1.4.0-alpha10 contains these commits.
Lint
- Added the
DetachAndAttachFragmentInSameFragmentTransaction
lint warning for detecting calling bothdetach()
andattach()
on the sameFragment
in the sameFragmentTransaction
- as these complementary operations cancel each other out when done in the same transaction, they must be split into separate transactions to actually do anything. (aosp/1832956, b/200867930) - Added the
FragmentAddMenuProvider
lint error for correcting usages of the Fragment Lifecycle to the Fragment view Lifecycle when using theaddMenuProvider
API ofMenuHost
. (aosp/1830457, b/200326272)
Documentation Updates
- The deprecation message for APIs now handled by the Activity Result APIs, namely
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
, andonRequestPermissionsResult
, have all been expanded with more details. (cce80f) - The deprecation message for
onActivityCreated()
for bothFragment
andDialogFragment
has all been expanded with more details. (224db4)
Version 1.4.0-alpha09
September 15, 2021
androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
, and androidx.fragment:fragment-testing:1.4.0-alpha09
are released. Version 1.4.0-alpha09 contains these commits.
New Features
- You can now call
clearBackStack(name)
to clear any state previously saved withsaveBackStack(name)
. (I70cd7)
API Changes
- The
FragmentContainerView
class has been rewritten in Kotlin ensuring that thegetFragment
function will properly respect nullability. (If694a, b/189629145) - FragmentStrictMode is now written in Kotlin (I11767, b/199183506)
Bug Fixes
- Fixed an issue where the state of a Fragment
that was added with
setReorderingAllowed(true)
and then immediately removed before executing pending transactions would not be properly cleaned up. (I8ccb8)
Version 1.4.0-alpha08
September 1, 2021
androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
, and androidx.fragment:fragment-testing:1.4.0-alpha08
are released. Version 1.4.0-alpha08 contains these commits.
Bug Fixes
- Improved the
UseRequireInsteadOfGet
Lint check to better handle redundant parenthesis. (I2d865) - Improved the
UseGetLayoutInflater
Lint check to handle additional edge cases. (Ie5423)
Version 1.4.0-alpha07
August 18, 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
, and androidx.fragment:fragment-testing:1.4.0-alpha07
are released with no notable changes. Version 1.4.0-alpha07 contains these commits.
Version 1.4.0-alpha06
August 4, 2021
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
, and androidx.fragment:fragment-testing:1.4.0-alpha06
are released. Version 1.4.0-alpha06 contains these commits.
Bug Fixes
- Fixed an issue with multiple back
stacks when rapidly swapping between back stacks
that would appear as an
IllegalStateException
while restoring aFragmentTransaction
or as a second copy of a fragment appearing. (I9039f) - Fixed an issue where
FragmentManager
would hold onto a copy of state previously saved viasaveBackStack()
even after that state was restored. (Ied212) - The
dismissAllowingStateLoss()
method ofDialogFragment
no longer crashes when you call it after the state is saved when specifically adding the DialogFragment via theshow(FragmentTransaction, String)
method. (I84422)
Version 1.4.0-alpha05
July 21, 2021
androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
, and androidx.fragment:fragment-testing:1.4.0-alpha05
are released. Version 1.4.0-alpha05 contains these commits.
Bug Fixes
- From Fragment
1.3.6
: The Fragment’s view is now properly set toGONE
when usinghide()
when the root view hastransitionGroup=”true”
set. (aosp/1766655, b/193603427) - From Fragment
1.3.6
:FragmentActivity
now always unlocks the saved state as its first operation in lifecycle callbacks it overrides. (I6db7a)
Dependency update
- From Fragment
1.3.6
: Fragments now depends on Activity1.2.4
(I3a66c)
Version 1.4.0-alpha04
June 30, 2021
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
, and androidx.fragment:fragment-testing:1.4.0-alpha04
are released. Version 1.4.0-alpha04 contains these commits.
API Changes
FragmentManager
now usesSavedStateRegistry
under the hood to save its state. ThesaveAllState()
andrestoreSavedState()
methods have also been deprecated inFragmentController
. If you are usingFragmentController
to host fragments outside ofFragmentActivity
, you should have yourFragmentHostCallbacks
implementSavedStateRegistryOwner
. (Iba68e, b/188734238)
Bug Fixes
- Fixed an issue where the call to
saveBackStack()
as part of supporting multiple back stacks would fail when done at the same time as running aFragmentTransaction
that usedreplace()
. (I73137) - Fixed a
NullPointerException
that would occur after manually restoring a saved back stack that contained multiple transactions when using therestoreBackStack()
API for multiple back stack support. This also fixed an issue wheresetReorderingAllowed(true)
was not being checked for all transactions. (I8c593) - Fixed an issue where
FragmentManager
would incorrectly continue to restore previously saved state of fragments even after those fragments were removed from theFragmentManager
, thus causing the saved state to continuously grow over time. (I1fb8e)
Version 1.4.0-alpha03
June 16, 2021
androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
, and androidx.fragment:fragment-testing:1.4.0-alpha03
are released. Version 1.4.0-alpha03 contains these commits.
New Features
- All Fragment StrictMode
Violation
classes have been updated with more detailed error messages that explain the details of the violation. (b/187871638)FragmentTagUsageViolation
now contains more detailed error message that container the parent container that the fragment would have been added to. (Ic33a7)WrongFragmentContainerViolation
now has more detailed error message that includes the container that the fragment was being added to. (Ib55f8)- The use case classes for
TargetFragmentUsageViolation
now have more detailed error messages to include the fragment causing the violation and any other contained information. (Icc6ac) - The classes extending
RetainInstanceUsageViolation
now have more detailed error messages that include the fragment causing the violation. (I6bd55) FragmentReuseViolation
now has more detailed error message that includes the previous id of the fragment. (I28ce2)SetUserVisibleHintViolation
now has more detailed error message that includes what the user visible hint was being set to. (Ib2d5f)
Behavior Changes
- Reverted the restriction on calling
fitsSystemWindows
on aFragmentContainerView
- this no longer crashes your app. (6b8ddd, b/190622202)
Bug Fixes
- From Fragment
1.3.5
: Fixed a regression in shared element transitions introduced in Fragment1.3.4
by aosp/1679887. Fragments now correctly handle transition groups (either set directly viatransitionGroup="true"
or indirectly via atransitionName
orbackground
) and shared elements will no longer throwIndexOutOfBoundsException
s. (I16484, b/188679569, b/188969304) - The
FragmentManager
will no longer crash when you attempt to hide a removing fragment. (I573dd, b/183634730) - The
OnCreateDialogIncorrectCallback
lint check will no longer crash when evaluating a top level variable. (0a9efa, b/189967522)
Version 1.4.0-alpha02
June 2, 2021
androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
, and androidx.fragment:fragment-testing:1.4.0-alpha02
are released. Version 1.4.0-alpha02 contains these commits.
New Features
FragmentStrictMode
will now always log violations when logging is enabled via theFragmentManager
, regardless of the current strict mode policy being used. (I02df6, b/187872638)FragmentStrictMode
now supports exempting particularFragment
classes from strict modeViolation
s allowing that class to bypass any penalties. (Ib4e5d, b/184786736)The
FragmentStrictMode
Violation
class has been expanded to add structure information based on each violation. This allows you to verify exactly what caused the violation along with the violating fragment (If5118, b/187871150), eachViolation
contains the following:WrongFragmentContainerViolation
now contains theViewGroup
that theFragment
was attempting to be added to. (I83c75, b/187871150)TargetFragmentUsageViolation
has been expanded into,SetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
, andGetTargetFragmentRequestCodeUsageViolation
, withSetTargetFragmentUsageViolation
containing the target fragment and request code. (I741b4, b/187871150)SetUserVisibleHintViolation
now contains the boolean value passed intosetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
now contains the ViewGroup that the<fragment>
tag was attempting to inflate a fragment into.(I5dbbc, b/187871150)FragmentReuseViolation
now contains the unique ID of the previous instance of theFragment
that caused the viotion. (I0544d, b/187871150)RetainInstanceUsageViolation
is now abstract and has two subclasses,SetRetainInstanceUsageViolation
andGetRetainInstanceUsageViolation
, representing the two cases for the violation type. (Ic81e5, b/187871150)
Behavior Changes
FragmentContainerView
now throws an exception when attempting to change thefitsSystemWindow
attribute programmatically or via XML. Insets should be handled by each individual fragment’s view. (Ie6651, b/187304502)
Version 1.4.0-alpha01
May 18, 2021
androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
, and androidx.fragment:fragment-testing:1.4.0-alpha01
are released. Version 1.4.0-alpha01 contains these commits.
New Features
FragmentContainerView
now provides agetFragment()
method which returns the fragment that was most recently added to the container. This uses the same logic asfindFragmentById()
with the ID of theFragmentContainerView
, but allows chaining the call. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Added
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
to specify whether to enable the standard Activity-transition animation taken from your theme in Fragments transition. (I46652)
Multiple back stacks
The FragmentManager
maintains a back stack made up of fragment transactions that used addToBackStack()
. This allows you to pop those transactions and return to the previous state, using the mechanisms for Saving state with fragments to allow your fragments to restore their state appropriately.
This release expands on these mechanisms by providing two new FragmentManager
APIs: saveBackStack(String name)
and restoreBackStack(String name)
. These APIs use the same name
as addToBackStack()
to save the state of the FragmentTransaction
and the state of every fragment that was added in those transactions and allow you to later restore those transactions and their fragments with their state in tact. This allows you to effectively ‘swap’ between multiple back stacks by saving the current back stack and restoring a saved back stack.
saveBackStack()
operates similarly to popBackStack()
in that it is asynchronous and results in all the fragment transactions back to that specific name to be reversed (‘popped’) and any added fragments to be destroyed and removed, but it differs in a few important ways:
saveBackStack()
is always inclusive.- Unlike
popBackStack()
which will pop all transactions on the back stack if the specified name is not found on the back stack or if a null name is provided,saveBackStack()
does nothing if you haven’t previously committed a fragment transaction usingaddToBackStack()
with that exact, non-null name. - The state of all fragments added from those transactions is saved. This means that the View state of every fragment is stored,
onSaveInstanceState()
of every fragment is called and that state is restored, and anyViewModel
instances associated with those fragments are retained (andonCleared()
is not called on them).
The fragment transactions that can be used with saveBackStack()
must meet certain criteria:
- Every fragment transaction must use
setReorderingAllowed(true)
to ensure the transactions can be restored as a single, atomic operation. - The set of transactions saved must be self-contained (i.e., they must not explicitly reference any fragments outside of that set of transactions) to ensure that they can be restored at any later time, no matter what changes have been made to the back stack in the intervening time.
- No fragment that is saved can be a retained fragment or have a retained fragment in their transitive set of child fragments to ensure that the
FragmentManager
does not return any references to saved fragments after the back stack is saved.
Similar to saveBackStack()
, restoreBackStack()
does nothing if you have not previously called saveBackStack()
with the same name. (b/80029773)
Fragment StrictMode
The FragmentStrictMode
APIs provide runtime checks that allow you to verify that your app or libraries you depend on are not calling deprecated fragment APIs. When a violation is detected, you can choose to print a log message, trigger your own custom listener, or crash your app. The FragmentStrictMode.Policy
that controls what checks are enabled and what “penalties” are triggered can be set on a FragmentManager
via the new setStrictModePolicy()
method. That policy applies to that FragmentManager
and transitively to any child fragment managers that do not set their own unique policy. (#123, #131, #150, b/143774122)
detectFragmentReuse()
detects whether a previously removedFragment
instance is being re-added to aFragmentManager
. You should never interact with or keep a reference to aFragment
instance after it has been destroyed and removed from aFragmentManager
. (#142, b/153738653)detectFragmentTagUsage()
detects when you are using the<fragment>
tag in your layout XML. You should always useFragmentContainerView
when inflating fragments as part of your layout. (#141, b/153738235)detectWrongFragmentContainer()
detects when you add a fragment to a container that is not aFragmentContainerView
. You should always useFragmentContainerView
as the container for fragments in your layout. (#146, b/181137036)detectRetainInstanceUsage()
detects when you use the deprecatedsetRetainInstance()
orgetRetainInstance()
APIs. (#140, b/153737954)detectSetUserVisibleHint()
detects when you use the deprecatedsetUserVisibleHint()
API. (#136, b/153738974)detectTargetFragmentUsage()
detects when you use the deprecatedsetTargetFragment()
,getTargetFragment()
orgetTargetRequestCode()
APIs. (#139, b/153737745)
API Changes
- The experimental API of
FragmentManager.enableNewStateManager(boolean)
has been removed and the new state manager is now the only option available. (I90036, b/162776418) FragmentScenario
now implementsCloseable
, allowing you to use it with Kotlin’suse
method or try-with-resources. (#121, b/143774122)
New Lint checks
- The
UseGetLayoutInflater
Lint check now warns when usingLayoutInflater.from(Context)
within aDialogFragment
- you should always use the dialog fragment’sgetLayoutInflater()
method to get the appropriate forLayoutInflater
. (#156, b/170781346) - The
DialogFragmentCallbacksDetector
Lint check now warns when callingsetOnCancelListener
orsetOnDismissListener
in theonCreateDialog()
method of aDialogFragment
- these listeners are owned by theDialogFragment
itself and you should overrideonCancel()
andonDismiss()
to receive these callbacks. (#171, b/181780047, b/187524311)
Bug Fixes
- From Fragment 1.3.4: Fixed a regression introduced in Fragment
1.3.3
when using theViewTreeViewModelStoreOwner.get()
API withViewModelProvider
or the Jetpack Compose method ofviewModel()
inside a Fragment. These use cases now correctly use theViewModelProvider.Factory
provided by your Fragment if it overridesgetDefaultViewModelProviderFactory()
(as@AndroidEntryPoint
annotated Fragments do when using Hilt). If you do not override that method, aSavedStateViewModelFactory
that saves and restores its state alongside the Fragment’s view is created as the default factory. (I5cbfa, b/186097368) - From Fragment 1.3.4: When using
FragmentContainerView
on API 29, insets will no longer dispatch indefinitely, fixing issues withBottomNavigationBar
andFloatingActionButton
instances. (I1bb78, b/186012452) - From Fragment 1.3.4: You can now retrieve your Parcelable from the fragment result bundle after process death. (I65932, b/187443158)
- From Fragment 1.3.4: When doing a shared element transition on a ViewGroup, if the
ViewGroup has
transitionGroup
set to false, it will now properly transition. (I99675)
External Contribution
- Thanks simonschiller for making
FragmentScenario
implementCloseable
. (#121, b/143774122) - Thanks simonschiller for adding the entirety of the
FragmentStrictMode
API for this release! (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - Thanks tatocaster for adding the
UseGetLayoutInflater
Lint check. (#156, b/170781346) - Thanks tatocaster for adding the
DialogFragmentCallbacksDetector
Lint check. (#171, b/181780047)
Version 1.3
Version 1.3.6
July 21, 2021
androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
, and androidx.fragment:fragment-testing:1.3.6
are released. Version 1.3.6 contains these commits.
Bug Fixes
- From Fragment
1.4.0-alpha03
: TheFragmentManager
will no longer crash when you attempt to hide a removing fragment. (I573dd, b/183634730) - The Fragment’s view is now properly set to
GONE
when usinghide()
when the root view hastransitionGroup=”true”
set. (aosp/1766655, b/193603427) FragmentActivity
now always unlocks the saved state as its first operation in lifecycle callbacks it overrides. (I6db7a)
Dependency update
- From Fragment
1.3.6
: Fragments now depends on Activity1.2.4
(I3a66c)
Version 1.3.5
June 16, 2021
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
, and androidx.fragment:fragment-testing:1.3.5
are released. Version 1.3.5 contains these commits.
Bug Fixes
- Fixed a regression in shared element transitions introduced in Fragment
1.3.4
by aosp/1679887. Fragments now correctly handle transition groups (either set directly viatransitionGroup="true"
or indirectly via atransitionName
orbackground
) and shared elements will no longer throwIndexOutOfBoundsException
s. (I16484, b/188679569, b/188969304)
Version 1.3.4
May 18, 2021
androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
, and androidx.fragment:fragment-testing:1.3.4
are released. Version 1.3.4 contains these commits.
Bug Fixes
- Fixed a regression introduced in Fragment
1.3.3
when using theViewTreeViewModelStoreOwner.get()
API withViewModelProvider
or the Jetpack Compose method ofviewModel()
inside a Fragment when using Hilt. These use cases now correctly use theViewModelProvider.Factory
provided by your Fragment if it overridesgetDefaultViewModelProviderFactory()
(as@AndroidEntryPoint
annotated Fragments do). If you do not override that method, aSavedStateViewModelFactory
that saves and restores its state alongside the Fragment’s view is created as the default factory. (I5cbfa, b/186097368) - When using
FragmentContainerView
on API 29, insets will no longer dispatch indefinitely, fixing issues withBottomNavigationBar
andFloatingActionButton
instances. (I1bb78, b/186012452) - You can now retrieve your Parcelable from the fragment result bundle after process death. (I65932, b/187443158)
- When doing a shared element transition on a ViewGroup, if the
ViewGroup has
transitionGroup
set to false, it will now properly transition. (I99675)
Version 1.3.3
April 21, 2021
androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
, and androidx.fragment:fragment-testing:1.3.3
are released. Version 1.3.3 contains these commits.
New Features
- Using
SavedStateViewModelFactory
now works when used with theSavedStateRegistryOwner
returned by usingViewTreeSavedStateRegistryOwner.get()
with the Fragment's View. (I21acf, b/181577191)
Bug Fixes
- Fixed a regression introduced in Fragment
1.3.2
which would causepopEnter
animations to not run when popping aFragmentTransaction
that included asetPrimaryNavFragment
operation, such as those used byNavHostFragment
. (I38c87, b/183877426) FragmentContainerView
now ensures that everyFragment
is dispatched a new set ofWindowInsets
, ensuring that each fragment can now independently consume the insets. (I63f68, b/172153900)DialogFragment
now properly handles cases where a child fragment is added to a container that has the same ID as a container in your customDialog
class, fixing view hierarchy issues when reusing IDs that are used internally by dialogs such asBottomSheetDialog
. (Ie6279, b/180021387)FragmentManager.dump()
now properly indents the first fragment in the list of active fragments. (If5c33, b/183705451)
New State Manager Bug Fixes
- The new fragment state manager now properly handles exit transitions with hide operations. (I9e4de, b/184830265)
Version 1.3.2
March 24, 2021
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
, and androidx.fragment:fragment-testing:1.3.2
are released. Version 1.3.2 contains these commits.
New State Manager Bug Fixes
- When running both
popBackStack()
andcommit()
operations together, the last operation will now set the direction for all animations rather than running some pop animations and some enter animations. (I7072e, b/181142246) - Views within in a shared element hierarchy will no longer have their transition name cleared when doing a shared element transition. (I4d4a6, b/179934757)
Dependency Updates
- Fragment now depends on Activity 1.2.2, fixing an issue with Activity’s
InvalidFragmentVersionForActivityResult
lint check when using Fragment 1.3.1 or higher. - Fragment now depends on Lifecycle 2.3.1.
Version 1.3.1
March 10, 2021
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
, and androidx.fragment:fragment-testing:1.3.1
are released. Version 1.3.1 contains these commits.
New Features
- Dialogs within a
DialogFragment
can now get access to ViewTree owners through their DecorView, ensuring thatDialogFragment
can be used withComposeView
. (Ib9290, b/180691023)
Bug Fixes
- Fragments inflated into an already
RESUMED
activity using FragmentContainerView are now properly shown after a configuration change. (Ie14c8, b/180538371) - There is no longer an extra
}
at the end of the fragmenttoString()
(I54705, b/177761088) - Overridden methods in FragmentActivity now properly inherit the base method javaDoc (I736ce, b/139548782)
- The docs for
setFragmentResult
andsetFragmentResultListener
have updated their parameters docs to reflect that they no longer accept nullables (I990ba, b/178348386)
New State Manager Bug Fixes
- Fixed a memory leak in fragments caused by
mFocusedView
(Ib4e9e, b/179925887) - Fragments now properly call
onCreateOptionsMenu
when using show/hide transactions (I8bce8, b/180255554) - Child fragments with transitions that start prior to the fragment being laid out will now properly reach
RESUMED
(Ic11e6, b/180825150) - Fragments inflated using the
<fragment>
tag will now always make it toRESUMED
(I452ac, (I9fa49)
Dependency Updates
- Fragment 1.3.1 depends on Activity
1.2.1
. (I557b9)
Version 1.3.0
February 10, 2021
androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
, and androidx.fragment:fragment-testing:1.3.0
are released. Version 1.3.0 contains these commits.
Major changes since 1.2.0
- New State Manager: A significant rewrite of the internals of
FragmentManager
has fixed numerous issues around the dispatch of lifecycle events, animations and transitions, and how postponed fragments are handled. Activity Result API Integration: Added support for the
ActivityResultRegistry
API introduced in Activity1.2.0
to handlestartActivityForResult()
+onActivityResult()
as well asrequestPermissions()
+onRequestPermissionsResult()
flows without overriding methods in your Fragment in addition to providing hooks for testing these flows. See the updated Getting a Result from an Activity.- This release fixes a number of issues around invalid request codes and the dispatch of permission requests that prevent the Activity Result API from working on previous versions of
FragmentActivity
. You must upgrade to Fragment 1.3.0 to use the Activity Result APIs in aFragmentActivity
orAppCompatActivity
.
- This release fixes a number of issues around invalid request codes and the dispatch of permission requests that prevent the Activity Result API from working on previous versions of
Fragment Result API: Added support for passing results between two Fragments via new APIs on
FragmentManager
. This works for hierarchy fragments (parent/child), DialogFragments, and fragments in Navigation and ensures that results are only sent to your Fragment while it is at leastSTARTED
. The target fragment APIs have been deprecated in favor of these new APIs. See Get Results using the Fragment Result API.FragmentOnAttachListener
: TheonAttachFragment()
callback onFragmentActivity
andFragment
have been deprecated. A newFragmentOnAttachListener
has been added to provide a more flexible alternative, allowing delegation ofonAttachFragment()
to separate, testable listeners and support for adding a listener to FragmentManagers other than your direct child FragmentManager.FragmentScenario
Improvements: TheFragmentScenario
class from thefragment-testing
artifact has been rewritten in Kotlin and has received a number of improvements:FragmentScenario
now usessetMaxLifecycle()
to implementmoveToState()
, ensuring consistent behavior on all API levels and decoupling the Fragment’s state from the underlying Activity.FragmentScenario
now supports setting an initialLifecycle.State
to support asserting the fragment’s state before moving to eachLifecycle.State
for the first time.- There is now an alternative to the
FragmentScenario
API ofonFragment
in the form of the Kotlin reified extension methodwithFragment
that allows you to return a value. Notably, it rethrows exceptions raised in the given block.
ViewTree
Support:Fragment
now supports theViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
, andViewTreeSavedStateRegistryOwner
APIs added in Lifecycle2.3.0
and SavedState1.1.0
such that it will return the Fragment as theViewModelStoreOwner
, and aSavedStateRegistryOwner
andLifecycleOwner
tied to the fragment’s view Lifecycle when using aView
within aFragment
.TRANSIT_
animation changes: The fragment default effects,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, andTRANSIT_FRAGMENT_FADE
, now useAnimator
instead ofAnimation
. The resources used to build these animators are now private.setRetainInstance()
deprecation: ThesetRetainInstance()
method on Fragments has been deprecated. With the introduction of ViewModels, developers have a specific API for retaining state that can be associated with Activities, Fragments, and Navigation graphs. This allows developers to use a normal, not retained Fragment and keep the specific state they want retained separate, avoiding a common source of leaks while maintaining the useful properties of a single creation and destruction of the retained state (namely, the constructor of theViewModel
and theonCleared()
callback it receives).ViewPager 1 adapter deprecation: With the release of ViewPager2
1.0.0
, theFragmentPagerAdapter
andFragmentStatePagerAdapter
classes for interacting withViewPager
have been deprecated. See Migrate from ViewPager to ViewPager2.
Version 1.3.0-rc02
January 27, 2021
androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
, and androidx.fragment:fragment-testing:1.3.0-rc02
are released. Version 1.3.0-rc02 contains these commits.
Bug Fixes
- Fixed an issue where a parent
DialogFragment
would appear above a childDialogFragment
after a configuration change; child dialog fragments now always appear above a parent dialog fragment. (I30806, b/177439520) - Fixed issue where doing a
hide
operation with anAnimation
would cause the hiding fragment to flash at the end of the animation. (I57e22, b/175417675) - Fragments with transitions added before the view hierarchy is
attached now properly reach
RESUMED
. (I1fc1d, b/177154873)
New State Manager Bug Fixes
- The Fragment’s view
Lifecycle
now properly handles cases where the Fragment’s view is destroyed before theLifecycle
reachesCREATED
, avoiding exceptions stating “no event down from INITIALIZED”. (eda2bd, b/176138645) - Fragments that use an
Animator
now appear in the proper order when usingFragmentContainerView
. (Id9aa3, b/176089197)
Version 1.3.0-rc01
December 16, 2020
androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
, and androidx.fragment:fragment-testing:1.3.0-rc01
are released. Version 1.3.0-rc01 contains these commits.
Bug Fixes
onPrepareOptionsMenu()
now follows the same logic asonCreateOptionsMenu()
and is no longer called when a parent fragment callssetMenuVisibility(false)
. (Id7de8, b/173203654)
New State Manager Bug Fixes
- Fixed leak and visual artifact when adding
a fragment with an
Animation
to aFragmentContainerView
and then interrupting that addition with a pop operation. (I952d8) - Fixed an issue where the fragment's view would
remain in the view hierarchy if it was replaced during
its
onCreate()
oronViewCreated()
methods. (I8a7d5) - Focus is now properly restored to Fragment root views when they are resumed. (Ifc84b)
- Combining pop and replace operations in the same fragment transaction will now show the proper animations (Ifd4e4, b/170328691)
Version 1.3.0-beta02
December 2, 2020
androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
, and androidx.fragment:fragment-testing:1.3.0-beta02
are released. Version 1.3.0-beta02 contains these commits.
New Features
FragmentScenario
has been fully converted to Kotlin while maintaining source and binary compatibility via usage of Kotlin 1.4's functional interfaces forFragmentAction
. (I19d31)
Behavior Changes
- FragmentContainerViews that do not inflate a fragment using the
class
orandroid:name
attribute can now be used outside of aFragmentActivity
. (Id4397, b/172266337) - Attempting to set the max lifecycle of a fragment to
DESTROYED
will now throw anIllegalArgumentException
(Ie7651, b/170765622) - Initializing a FragmentScenario with a
DESTROYED
state will now throw anIllegalArgumentException
(I73590, b/170765622)
New State Manager Bug Fixes
- Fixed an issue where the view would not reach its final state if you interrupt a fragment transition that was using an
Animator
or one of theTRANSIT_FRAGMENT_
options. (I92426, b/169874632) - Fixed an issue that prevented fragments with an exiting
Animation
from being properly destroyed. (I83d65) - Exiting fragments that have their effects reversed now correctly cancel and restart with the proper entering effect. (I62226, b/167092035)
- Fixed an issue where the exit
Animator
of ahide()
would not run. (Id7ffe) - Fragments now properly appear when postponed and then immediately started. (Ie713b, b/170022857)
- Fragments that remove their focused view during an animation will no longer attempt to restore the focus on the detached view once they reach
RESUMED
(I38c65, b/172925703)
External Contribution
FragmentFactory
now caches fragment classes separately for differentClassLoader
instances. Thanks Simon Schiller! (#87, b/113886460)
Version 1.3.0-beta01
October 1, 2020
androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
, and androidx.fragment:fragment-testing:1.3.0-beta01
are released. Version 1.3.0-beta01 contains these commits.
New Features
setMaxLifecycle()
now supports setting theLifecycle
state toINITIALIZING
as long as the fragment has not been moved toCREATED
. (b/159662173)
API Changes
- Upgrade androidx to use Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Behavior Changes
- Fragment resource files have been correctly made private. (aosp/1425237)
Bug Fixes
- Fragments inflated using the
<fragment>
tag will now properly wait until their views are added to a container before moving to STARTED (I02f4c) - Fragments that are visible and then
setMaxLifecycle()
toCREATED
now properly run their exit effects. (b/165822335) - Removing a detached fragment that is not added to the back stack no longer causes a memory leak. Courtesy of Nicklas Ansman Giertz! (b/166489383)
- Active fragments will now always have a non-null
FragmentManager
and fragments with a non-nullFragmentManager
will always be considered active. (aosp/1422346) - The fragment default effects,
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, andTRANSIT_FRAGMENT_FADE
, now useAnimator
instead ofAnimation
. (b/166155034)
New State Manager Bug Fixes
- Fragments now properly restore their view focus state from right before they start their animation. (Icc256)
- Fragments that only have a shared element transition now properly complete their special effects meaning they actually move to their final state (Iaebc7, b/166658128)
- Fragment views are now always removed from the container before being destroyed. (Id5876)
- The new state manager now consistently removes the exiting fragment view before adding the entering one. (I41a6e)
- Explicit changes to a fragment view’s visibility are now respected by the new state manager. This means that if you set an entering fragment’s view to
INVISIBLE
before the animation begins, it will actually stay invisible. (b/164481490) - Fragments now prioritize
Animators
overAnimations
, meaning a fragment with both will only run theAnimator
and ignore theAnimation
. (b/167579557) - The new state manager no longer causes fragments to flash when using entering animations. (b/163084315)
Known Issue
When using the new state manager, if you press back during an entering special effect instead of returning to the previous fragment, the old fragment is never re-added, resulting in a blank screen. (b/167259187, b/167092035, b/168442830)
Version 1.3.0-alpha08
August 19, 2020
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
, and androidx.fragment:fragment-testing:1.3.0-alpha08
are released. Version 1.3.0-alpha08 contains these commits.
New State Manager
This release includes a major refactoring of the internal state management of FragmentManager
which affects the dispatch of lifecycle methods, animations and transitions, and how postponed transactions are handled. This is enabled by default. See the Fragments: Rebuilding the Internals blog post for more details. (b/139536619, b/147749580)
- An experimental API in
FragmentManager.enableNewStateManager(boolean)
can be used to control whether FragmentManager uses the new state manager. (I7b6ee)
The following issues are fixed only when using the new state manager:
- The previous fragment of a
replace
operation is now correctly stopped before the new fragment is started. (b/161654580) - Fragments now prevent multiple competing animations on the same fragments, avoiding cases where an
Animation
would override allTransition
effects or anAnimator
and aTransition
on an individual fragment would both run. (b/149569323) - The
enterTransition
andexitTranstion
of all fragments entering and exiting are now ran rather than only the last entering fragment and the first exiting fragment. (b/149344150) - Postponed fragments no longer get stuck at the
CREATED
state but instead move toSTARTED
with other fragments. (b/129035555) - Fixed an issue where
FragmentManager
would execute operations out of order when mixing a postponed re-ordered transaction and a non-reordered transaction. (b/147297731) - Popping multiple fragments simultaneously will no longer result in intermediate fragments being temporarily visible when postponing fragments. (b/37140383)
FragmentManager
now returns the correct fragments when callingfindFragmentById()
orfindFragmentByTag()
from within theonAttachFragment()
callback. (b/153082833)- Fragments no longer call
onCreateView()
on fragments being destroyed when the fragment replacing them is postponed. (b/143915710) - The error message when attempting to combine framework
Transition
and AndroidXTransition
instances now mentions the fragment with the invalid transition. (b/155574969)
Behavior Changes
- You can now call
launch()
on anActivityResultLauncher
in theonCreate()
lifecycle method of a fragment. (b/161464278) - Calling
registerForActivityResult()
afteronCreate()
now throws an exception indicating that this is not allowed rather than silently failing to deliver results after a configuration change. (b/162255449) FragmentActivity
now uses theOnContextAvailableListener
API introduced in Activity1.2.0-alpha08
to restore the state of theFragmentManager
. Any listeners added to subclasses ofFragmentActivity
will run after this listener. (I513da)
Bug Fixes
ActivityOptions
passed through when usingstartIntentSenderForResult()
are now respected. (b/162247961)
Known Issue
- When using the new state manager, directly setting the visibility of the fragment’s root view after
onViewCreated()
and beforeonResume()
results in the visibility you set being overridden byFragmentManager
, who controls the visibility of the root view. As a workaround, you should always use thehide()
andshow()
operations to change the visibility of your fragment. (b/164481490)
Version 1.3.0-alpha07
July 22, 2020
androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
, and androidx.fragment:fragment-testing:1.3.0-alpha07
are released. Version 1.3.0-alpha07 contains these commits.
New Features
FragmentScenario
now supports setting an initial Lifecycle state ofCREATED
,STARTED
, orRESUMED
rather than always moving the Fragment to theRESUMED
state. (b/159662750)- Added an alternative to the
FragmentScenario
API ofonFragment
in the form of the Kotlin reified extension methodwithFragment
that allows you to return a value. Notably, it rethrows exceptions raised in the given block. (b/158697631)
Behavior Changes
FragmentScenario
now usessetMaxLifecycle()
to implementmoveToState()
, ensuring consistent behavior on all API levels and decoupling the Fragment’s state from the underlying Activity. (b/156527405)- The
SavedStateRegistryOwner
returned byViewTreeSavedStateRegistryOwner
is now tied to the fragment view’s Lifecycle. This ensures that it has its state saved and restore at the same time as the fragment’s view. (b/158503763)
Bug Fixes
- Fragments now wait for the fragment’s view to be attached before calling
ViewCompat.requestApplyInsets()
, avoiding cases where the inset request was being dropped. (b/158095749) - Calling
clearFragmentResultListener
now properly clears the lifecycle observer. (b/159274993)
Version 1.3.0-alpha06
June 10, 2020
androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
, and androidx.fragment:fragment-testing:1.3.0-alpha06
are released. Version 1.3.0-alpha06 contains these commits.
New Features
- The
onAttachFragment()
callback onFragmentActivity
andFragment
have been deprecated. A newFragmentOnAttachListener
has been added to provide a more flexible alternative, allowing delegation ofonAttachFragment()
to separate, testable listeners and support for adding a listener to FragmentManagers other than your direct child FragmentManager. (I06d3d)
Bug Fixes
- Parent fragments now have their view state restored before their child fragments, fixing a visual ordering issue after a configuration change when a
DialogFragment
would show anotherDialogFragment
as a child fragment. (b/157195715) - Fixed an issue where the
UseRequireInsteadOfGet
Lint check would not handle chained usages of the?.
and!!
operators correctly. (b/157677616)
Version 1.3.0-alpha05
May 20, 2020
androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
, and androidx.fragment:fragment-testing:1.3.0-alpha05
are released. Version 1.3.0-alpha05 contains these commits.
New Features
- Added support for
ViewTreeViewModelStoreOwner
from Lifecycle2.3.0-alpha03
, andViewTreeSavedStateRegistryOwner
from SavedState1.1.0-alpha01
when using aView
within aFragment
. (aosp/1297993, aosp/1300264)
API Changes
- The
setFragmentResult()
andsetFragmentResultListener()
APIs now take a non-nullBundle
andFragmentResultListener
, respectively. To explicitly clear a previously set result or listener, use the newclearFragmentResult()
andclearFragmentResultListener()
methods. (b/155416778) - The
setFragmentResultListener()
Kotlin extensions that take a lambda are now marked asinline
. (b/155323404)
Behavior Changes
- The previously deprecated
startActivityForResult()
,startIntentSenderForResult()
, andrequestPermissions
onFragment
now internally useActivityResultRegistry
, thus removing the restriction on using only the lower bits (below0xFFFF
) for your request codes when using those APIs. (b/155518741)
Documentation Updates
- Expanded the documentation on the
Fragment(@LayoutRes int)
andDialogFragment(@LayoutRes int)
constructors to clarify that they should be called from your subclasses’ no argument constructor when using the defaultFragmentFactory
. (b/153042497)
Version 1.3.0-alpha04
April 29, 2020
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
, and androidx.fragment:fragment-testing:1.3.0-alpha04
are released. Version 1.3.0-alpha04 contains these commits.
New Features
- Added support for passing results between two Fragments via new APIs on
FragmentManager
. This works for hierarchy fragments (parent/child), DialogFragments, and fragments in Navigation and ensures that results are only sent to your Fragment while it is at leastSTARTED
. (b/149787344)
API Changes
- The target fragment APIs have been deprecated. To pass data between fragments the new Fragment Result APIs should be used instead. (b/149787344)
- The
startActivityForResult()
/onActivityResult()
andrequestPermissions()
/onRequestPermissionsResult()
APIs on Fragment have been deprecated. Please use the Activity Result APIs. (aosp/1290887) - Breaking change from Activity
1.2.0-alpha04
: theprepareCall()
method has been renamed toregisterForActivityResult()
. (aosp/1278717)
Bug Fixes
- The fragment’s
getViewLifecycleOwner()
is now stopped beforeonSaveInstanceState()
is called, mirroring the behavior of the fragment’s lifecycle. (b/154645875) - Calling
setMenuVisibility(false)
on a fragment now correctly changes the visibility of menus provided by its child fragments. (b/153593580) - Fixed an
illegalStateException
when adding a fragment to aDialogFragment
’s view hierarchy withFragmentContainerView
. (b/154366601) - The
getDefaultViewModelProviderFactory()
method on fragments no longer crashes when hosting your fragments outside of an activity. (b/153762914)
Version 1.3.0-alpha03
April 1, 2020
androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
, and androidx.fragment:fragment-testing:1.3.0-alpha03
are released. Version 1.3.0-alpha03 contains these commits.
API Changes
- The
prepareCall
methods onFragment
are nowfinal
. (b/152439361)
Bug Fixes
- Fixed a regression introduced in Fragment
1.3.0-alpha02
when usingBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - Fixed a crash when using
prepareCall
from a fragment after a configuration change. (b/152137004) - Fixed an issue where shared element and exit transitions are ignored when using
setTargetFragment()
. (b/152023196) - From Fragment
1.2.4
: Updated the Fragment ProGuard rules to allow obfuscation of kept fragments. (b/151605338) - From Fragment
1.2.4
: Disabled theFragmentLiveDataObserve
Lint rule onDialogFragment
classes as their lifecycle and view lifecycle are always in sync, making it safe to use eitherthis
orviewLifecycleOwner
when callingobserve
. (b/151765086)
Dependency Changes
- Fragments depend on Activity
1.2.0-alpha03
, which had significant improvements to the Activity Result API introduced in Activity1.2.0-alpha02
.
Version 1.3.0-alpha02
March 18, 2020
androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
, and androidx.fragment:fragment-testing:1.3.0-alpha02
are released. Version 1.3.0-alpha02 contains these commits.
New Features
- Added support for the
ActivityResultRegistry
API introduced in Activity1.2.0-alpha02
to handle thestartActivityForResult()
+onActivityResult()
as well asrequestPermissions()
+onRequestPermissionsResult()
flows without overriding methods in your Fragment in addition to providing hooks for testing these flows. See the updated Getting a Result from an Activity. (b/125158199)
API Changes
DialogFragment
now provides a constructor that takes a@LayoutRes
that indicates the layout thatonCreateView()
should inflate by default. (b/150327080)- The
onActivityCreated()
method is now deprecated. Code touching the fragment's view should be done inonViewCreated()
(which is called immediately beforeonActivityCreated()
) and other initialization code should be inonCreate()
. To receive a callback specifically when the activity'sonCreate()
is complete, aLifeCycleObserver
should be registered on the activity'sLifecycle
inonAttach()
, and removed once theonCreate()
callback is received. (b/144309266)
Bug Fixes
- From Fragment
1.2.3
: Fixed a bug inDialogFragment
that caused aStackOverflowError
when callinggetLayoutInflater()
from withinonCreateDialog()
. (b/117894767, aosp/1258664) - From Fragment
1.2.3
: Reduced the scope of Fragment’s included ProGuard rules to ensure that unused Fragment classes can be stripped. (b/149665169) - From Fragment
1.2.3
: Fixed false positives in theUseRequireInsteadOfGet
Lint check when using a local variable name that shadowed the Kotlin property name. (b/149891163) - From Fragment
1.2.3
:FragmentContainerView
no longer throws anUnsupportedOperationException
for using the incorrect constructor in layout preview. (b/149707833)
Known Issues
BottomSheetDialogFragment
no longer properly positions its dialog on the screen. (b/151652127)
Version 1.3.0-alpha01
March 4, 2020
androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
, and androidx.fragment:fragment-testing:1.3.0-alpha01
are released. Version 1.3.0-alpha01 contains these commits.
New Features
- Added support for the
ViewTreeLifecycleOwner.get(View)
API added in Lifecycle2.3.0-alpha01
such that it will return the Fragment’sviewLifecycleOwner
as theLifecycleOwner
for any Views returned byonCreateView()
. (aosp/1182955)
API Changes
- The
setRetainInstance()
method on Fragments has been deprecated. With the introduction of ViewModels, developers have a specific API for retaining state that can be associated with Activities, Fragments, and Navigation graphs. This allows developers to use a normal, not retained Fragment and keep the specific state they want retained separate, avoiding a common source of leaks while maintaining the useful properties of a single creation and destruction of the retained state (namely, the constructor of theViewModel
and theonCleared()
callback it receives). (b/143911815) - With the release of ViewPager2
1.0.0
, theFragmentPagerAdapter
andFragmentStatePagerAdapter
classes for interacting withViewPager
have been deprecated. See Migrate from ViewPager to ViewPager2. (b/145132715)
Bug Fixes
- Fragment ProGuard rules now correctly only keep the default constructors
Fragment
classes that are used rather than for allFragment
instances, fixing a regression introduced in Fragment1.2.1
. (b/149665169 - The
require___()
Lint rules added in Fragment1.2.2
no longer false positive on local variables that share the same name as the shadowed Kotlin property names (i.e.,view
). (b/149891163) FragmentContainerView
no longer throws anUnsupportedOperationException
when using the layout preview in Android Studio. (b/149707833)- Fixed an issue where retained fragments that were added after the state is saved would not be continually recreated and then destroyed after each configuration change. (b/145832397)
Version 1.2.5
Version 1.2.5
June 10, 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
, and androidx.fragment:fragment-testing:1.2.5
are released. Version 1.2.5 contains these commits.
Bug Fixes
- The fragment’s
getViewLifecycleOwner()
is now stopped beforeonSaveInstanceState()
is called, mirroring the behavior of the fragment’s lifecycle. This was previously released in Fragment1.3.0-alpha04
. (b/154645875) - Calling
setMenuVisibility(false)
on a fragment now correctly changes the visibility of menus provided by its child fragments. This was previously released in Fragment1.3.0-alpha04
. (b/153593580)
Version 1.2.4
Version 1.2.4
April 1, 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
, and androidx.fragment:fragment-testing:1.2.4
are released. Version 1.2.4 contains these commits.
Bug Fixes
- Updated the Fragment ProGuard rules to allow obfuscation of kept fragments. (b/151605338)
- Disabled the
FragmentLiveDataObserve
Lint rule onDialogFragment
classes as their lifecycle and view lifecycle are always in sync, making it safe to use eitherthis
orviewLifecycleOwner
when callingobserve
. (b/151765086)
Version 1.2.3
Version 1.2.3
March 18, 2020
androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
, and androidx.fragment:fragment-testing:1.2.3
are released. Version 1.2.3 contains these commits.
Bug Fixes
- Fixed a bug in
DialogFragment
that caused aStackOverflowError
when callinggetLayoutInflater()
from withinonCreateDialog()
. (b/117894767, aosp/1258665) - Reduced the scope of Fragment’s included ProGuard rules to ensure that unused Fragment classes can be stripped. (b/149665169)
- Fixed false positives in the
UseRequireInsteadOfGet
Lint check when using a local variable name that shadowed the Kotlin property name. (b/149891163) FragmentContainerView
no longer throws anUnsupportedOperationException
for using the incorrect constructor in layout preview. (b/149707833)
Version 1.2.2
Version 1.2.2
February 19, 2020
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
, and androidx.fragment:fragment-testing:1.2.2
are released. Version 1.2.2 contains these commits.
New Lint checks
- Lint suggests using the
viewLifecycleOwner
as theLifecycleOwner
to calls intoOnBackPressedDispatcher
inonCreateView()
,onViewCreated()
, andonActivityCreated()
. (b/142117657) - Added a new Lint check that confirms that you are using the correct
debugImplementation
when using thefragment-testing
artifact. (b/141500106) - Fragments now suggest using the associated
require___()
methods for more descriptive error messages instead ofcheckNotNull(get___())
,requireNonNull(get___())
, orget___()!!
for all of the Fragment APIs that include both aget
andrequire
equivalent. (aosp/1202883)
Bug Fixes
- Fixed the Fragment ProGuard files to avoid R8 warnings (b/148963981)
- Improved the existing Lint check suggesting using
viewLifecycleOwner
when usingobserve
to also handle thelivedata-ktx
extension method version ofobserve
. (b/148996309) - Fixed the formatting for many of the Lint checks (aosp/1157012)
External contributions
- Thanks to Zac Sweers for contributing the
require___()
Lint checks on behalf of Slack! (aosp/1202883)
Version 1.2.1
Version 1.2.1
February 5, 2020
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
, and androidx.fragment:fragment-testing:1.2.1
are released. Version 1.2.1 contains these commits.
Bug fixes
- Fragments added via the
add
andreplace
methods that take aClass
instance (or the Kotlin reified versions) now have their default constructor kept by ProGuard. (b/148181315) FragmentStatePagerAdapter
andFragmentPagerAdapter
no longer catch exceptions thrown byFragmentManager
when runningfinishUpdate()
. (aosp/1208711)- Fixed an issue where
FragmentManager.findFragment()
did not work with fragments added via the<fragment>
tag. (b/147784323) - Fragments inflated using the
<fragment>
tag now always receive a call toonInflate()
beforeonCreate()
when in the layout. (aosp/1215856) - Calling
toString()
on aFragmentManager
instance no longer throws aNullPointerException
when the Activity is already destroyed. (b/148189412)
Dependency changes
- Fragments
1.2.1
now depends on Lifecycle ViewModel SavedState2.2.0
.
Version 1.2.0
Version 1.2.0
January 22, 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
, and androidx.fragment:fragment-testing:1.2.0
are released. Version 1.2.0 contains these commits.
Important changes since 1.1.0
- FragmentContainerView: The
FragmentContainerView
is the strongly recommended container for dynamically added Fragments, replacing usage ofFrameLayout
or other layouts. It also supports the sameclass
,android:name
, and optionalandroid:tag
as the<fragment>
tag, but uses a normalFragmentTransaction
to add this initial fragment, instead of the custom code path used by<fragment>
. onDestroyView()
timing: Fragments now wait for exit animations, exit framework transitions, and exit AndroidX transitions (when using Transition1.3.0
) to complete before callingonDestroyView()
.- Class based
add()
andreplace()
: Added new overloads ofadd()
andreplace()
onFragmentTransaction
that take aClass<? extends Fragment>
and optionalBundle
of arguments. These methods use yourFragmentFactory
to construct an instance of the Fragment to add. Kotlin extensions that use reified types (i.e,fragmentTransaction.replace<YourFragment>(R.id.container)
) have also been added tofragment-ktx
. - Lifecycle ViewModel SavedState Integration:
SavedStateViewModelFactory
is now the default factory used when usingby viewModels()
,by activityViewModels()
, theViewModelProvider
constructor, orViewModelProviders.of()
with a Fragment. - New Lint checks: Added a new Lint check that ensures you are using
getViewLifecycleOwner()
when observingLiveData
fromonCreateView()
,onViewCreated()
, oronActivityCreated()
. getFragmentManager()
deprecation: ThegetFragmentManager()
andrequireFragmentManager()
methods on Fragment have been deprecated and replaced with a singlegetParentFragmentManager()
method, which returns the non-nullFragmentManager
the Fragment is added to (you can useisAdded()
to determine if it is safe to call).FragmentManager.enableDebugLogging()
deprecation: The staticFragmentManager.enableDebugLogging
method has been deprecated. FragmentManager now respectsLog.isLoggable()
for the tagFragmentManager
, allowing you to enable eitherDEBUG
orVERBOSE
logging without re-compiling your app.
Known Issues
- Fragments referenced only via the
class
orandroid:name
attribute on aFragmentContainerView
are not kept by ProGuard automatically, requiring that you manually add a keep rule for each fragment class. (b/142601969) - When adding a
NavHostFragment
usingclass
orandroid:name
in XML withFragmentContainerView
, you cannot usefindNavController()
inonCreate()
of your Activity. (b/142847973)
Version 1.2.0-rc05
January 8, 2020
androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
, and androidx.fragment:fragment-testing:1.2.0-rc05
are released. Version 1.2.0-rc05 contains these commits.
Bug fixes
- Fixed a regression in Fragment
1.2.0-rc04
when using the<fragment>
tag which causedonViewCreated()
to be called incorrectly during activity destruction. (b/146290333) - Fragments added with the
<fragment>
tag now properly have their non-config cleared even when they are only sometimes in the layout (i.e., only in your landscape layout). As a consequence, these Fragments are now correctly moved toCREATED
even when not in your layout instead of being instantiated but never moving through any lifecycle methods. (b/145769287)
Version 1.2.0-rc04
December 18, 2019
androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
, and androidx.fragment:fragment-testing:1.2.0-rc04
are released. Version 1.2.0-rc04 contains these commits.
Bug fixes
- Adjusted the animations for
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
, andTRANSIT_FRAGMENT_FADE
to avoid visual issues. (b/145468417)
Version 1.2.0-rc03
December 4, 2019
androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
, and androidx.fragment:fragment-testing:1.2.0-rc03
are released. Version 1.2.0-rc03 contains these commits.
Bug fixes
- Fixed an unintentional behavior change where Fragments who have been removed are still returned by
findFragmentById()
/findFragmentByTag()
while their exit animations/transitions run. (b/143982969, aosp/1167585) - Child fragments are now correctly stopped before their parents when the containing activity calls
onSaveInstanceState()
. (b/144380645) - Fixed an issue where Views were incorrectly marked
INVISIBLE
after popping a hidden Fragment. (b/70793925) - Fragment shared element transitions now handle Views that have been rotated, scaled, etc. (b/142835261)
Documentation Updates
- Clarified the deprecation documentation around
setUserVisibleHint()
. (b/143897055) - Improved the documentation on
setFragmentFactory()
andgetFragmentFactory()
to better indicate that setting aFragmentFactory
will also affect child FragmentManagers. (aosp/1170095)
Dependency changes
- Fragments now depends on Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, and Activity1.1.0-rc03
.
Version 1.2.0-rc02
November 7, 2019
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
, and androidx.fragment:fragment-testing:1.2.0-rc02
are released. Version 1.2.0-rc02 contains these commits.
Bug fixes
- When in Kotlin, the LintFix for using
getViewLifecycleOwner()
when observingLiveData
fromonCreateView()
,onViewCreated()
, oronActivityCreated()
(introduced in Fragment1.2.0-rc01
) now uses the Kotlin property access syntaxviewLifecycleOwner
instead ofgetViewLifecycleOwner()
. (aosp/1143821)
Version 1.2.0-rc01
October 23, 2019
androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
, and androidx.fragment:fragment-testing:1.2.0-rc01
are released. Version 1.2.0-rc01 contains these commits.
New features
FragmentContainerView
now supports theclass
attribute in addition toandroid:name
, mirroring the functionality of the<fragment>
tag. (b/142722242)- Added a new Lint check that ensures you are using
getViewLifecycleOwner()
when observingLiveData
fromonCreateView()
,onViewCreated()
, oronActivityCreated()
. (b/137122478)
Bug fixes
- The
onDismiss
andonCancel
callbacks onDialogFragment
now guarantee that theDialogInterface
passed to them is non-null and thatgetDialog()
returns non-null when they are executed. (b/141974033) FragmentContainerView
now adds the Fragment defined byclass
orandroid:name
as part of inflation, ensuring thatfindFragmentById()
andfindFragmentByTag()
work immediately afterwards. (b/142520327)- Fixed an
IllegalStateException
inFragmentContainerView
due to the state being saved. (b/142580713) - Fixed an
UnsupportedOperationException
inFragmentContainerView
when theFragmentContainerView
class is obfuscated. (b/142657034)
Known issues
- Fragments referenced only via the
class
orandroid:name
attribute on aFragmentContainerView
are not kept by ProGuard automatically, requiring that you manually add a keep rule for each fragment class. We have disabled the Lint rule suggesting moving toFragmentContainerView
until this is fixed viaaapt2
. (b/142601969)
Version 1.2.0-beta02
October 11, 2019
androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
, and androidx.fragment:fragment-testing:1.2.0-beta02
are released. Version 1.2.0-beta02 contains these commits.
Bug fixes
- Fixed an issue where Fragment's
onInflate()
did not receive proper attributes fromFragmentContainerView
, breaking cases such asNavHostFragment
. (b/142421837)
Version 1.2.0-beta01
October 9, 2019
androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
, and androidx.fragment:fragment-testing:1.2.0-beta01
are released. Version 1.2.0-beta01 contains these commits.
New features
FragmentContainerView
adds support for adding an initial fragment with added support for theandroid:name
and optionalandroid:tag
XML attributes. Unlike the<fragment>
tag,FragmentContainerView
uses a normalFragmentTransaction
under the hood to add the initial fragment, allowing furtherFragmentTransaction
operations on theFragmentContainerView
and enables the usage of View Binding for the layout. (b/139830628, b/141177981)- Fragments now contains a Lint warning offering a quick fix to replace
<fragment>
withFragmentContainerView
. (b/139830056)
Bug fixes
- Fixed a
ClassCastException
when usingandroidx.transition
. (b/140680619) - When using Transition
1.3.0-beta01
, Fragments now wait forandroidx.transition
transitions (in addition to framework transitions and animations, which were fixed in Fragment1.2.0-alpha03
and Fragment1.2.0-alpha02
, respectively) to finish before dispatchingonDestroyView()
. (aosp/1119841) - When using Transition
1.3.0-beta01
, Fragments now properly cancelandroidx.transition
transitions before starting new transitions / animations on the same container. (aosp/1119841) - Fixed an issue on API 17 and lower when using
androidx.transition
transitions on the root view of your Fragment when usingFragmentContainerView
. (b/140361893) - The
fragment-testing
artifact now depends on AndroidX Test1.2.0
, fixing an incompatibility with the latest Espresso 3.2.0. (b/139100149) - Removed usage of
Log.w
in FragmentManager. (aosp/1126468)
Known issues
- Fragment's
onInflate()
do not receive proper attributes fromFragmentContainerView
, breaking cases such asNavHostFragment
. (b/142421837)
Version 1.2.0-alpha04
September 18, 2019
androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
, and androidx.fragment:fragment-testing:1.2.0-alpha04
are released. Version 1.2.0-alpha04 contains these commits.
API changes
- The
getFragmentManager()
andrequireFragmentManager()
methods onFragment
have been deprecated and replaced with a singlegetParentFragmentManager()
method, which returns the non-nullFragmentManager
the Fragment is added to (you can useisAdded()
to determine if it is safe to call). (b/140574496) - The static
FragmentManager.enableDebugLogging
method has been deprecated. FragmentManager now respectsLog.isLoggable()
for the tagFragmentManager
, allowing you to enable eitherDEBUG
orVERBOSE
logging without re-compiling your app. (aosp/1116591)
Bug fixes
- Fragments are now properly destroyed while exit animations on other fragments are running. (b/140574199)
- Fixed an issue where Fragments would call
Activity.findViewById()
where before it did not. (aosp/1116431)
Version 1.2.0-alpha03
September 5, 2019
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
, and androidx.fragment:fragment-testing:1.2.0-alpha03
are released. The commits included in this version can be found here.
API changes
FragmentContainerView
is nowfinal
. (b/140133091)
Bug fixes
FragmentContainerView
now properly reverses the draw order when popping fragments off the back stack. (b/139104187)- Fixed an issue where the wrong animation would run when both popping a fragment and adding a new fragment at the same time. (b/111659726)
- Fragments now wait for transitions (in addition to animations, which was fixed in Fragment
1.2.0-alpha02
) to finish before dispatchingonDestroyView()
. (b/138741697)
Version 1.2.0-alpha02
August 7, 2019
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
, and androidx.fragment:fragment-testing:11.2.0-alpha02
is released. The commits included in this version can be found here.
New features
SavedStateViewModelFactory
is now the default factory used when usingby viewModels()
,by activityViewModels()
, theViewModelProvider
constructor, orViewModelProviders.of()
with aFragment
. (b/135716331)- The default animations when using
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
withsetTransition
on aFragmentTransaction
have been updated to match the animations used by activities on Android 10 devices. (aosp/1012812, aosp/1014730)
API changes
- Introduces
FragmentContainerView
as the strongly recommended container for dynamically added Fragments, replacing usage ofFrameLayout
, etc. as it fixes animation z-ordering issues and window insets dispatching to Fragments. (b/37036000, aosp/985243, b/136494650) - Added a static
FragmentManager.findFragment(View)
method to retrieve the containing Fragment from a view inflated by a fragment. A Kotlin extension is also available infragment-ktx
. (aosp/1090757) - Added new overloads of
add()
andreplace()
onFragmentTransaction
that take aClass<? extends Fragment>
and optionalBundle
of arguments. These methods use yourFragmentFactory
to construct an instance of the Fragment to add. Kotlin extension that use reified types (i.e,fragmentTransaction.replace<YourFragment>(R.id.container)
) have also been added tofragment-ktx
. (b/126124987) @MainThread
annotations have been added toFragment
lifecycle callbacks. (b/127272564)- The breadcrumb title related APIs on
FragmentTransaction
andFragmentManager.BackStackEntry
have been deprecated. (b/138252944) - The
setTransitionStyle
method onFragmentTransaction
has been deprecated. (aosp/1011537) - Many of the methods in
FragmentManager
are no longerabstract
.FragmentManager
itself remainsabstract
and should not be directly instantiated or extended; you should continue to only get an existing instance fromgetSupportFragmentManager()
,getChildFragmentManager()
, etc.
Bug fixes
- From Fragment
1.1.0-rc04
: Fragments now correctly cancel postponed transitions on Fragments have been popped. (b/138251858) - From Fragment
1.1.0-rc03
: Fixed an issue where callingpostponeEnterTransition()
with a timeout more than once would not cancel previous timeouts. (b/137797118) - From Fragment
1.1.0-rc02
: Fixed a crash inFragmentPagerAdapter
andFragmentStatePagerAdapter
when removing the current item. (b/137209870) - Fragments now wait for animations to finish before dispatching
onDestroyView()
. (b/136110528) - Fragment animations from child fragments and their descendants are now properly handled when animating the parent Fragment. (b/116675313)
- Fixed a
NullPointerException
when using shared element transitions and combining a pop and add operation. (b/120507394) - Added a workaround to
IllegalStateException
s when usingFragmentPagerAdapter
andFragmentStatePagerAdapter
in Robolectric tests. (b/137201343)
Version 1.2.0-alpha01
July 2, 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
, and androidx.fragment:fragment-testing:1.2.0-alpha01
are released. The commits included in this version can be found here.
New features
- FragmentManager now calls
requestApplyInsets()
after attaching the Fragment’s view and directly before callingonViewCreated()
, ensuring that your view always has the correct insets. (b/135945162)
Bug fixes
- Fixed a
NullPointerException
when popping aFragmentTransaction
that usedsetPrimaryNavigationFragment()
beforereplace()
. (b/134673465)
Version 1.1.0
Version 1.1.0
September 5, 2019
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
, and androidx.fragment:fragment-testing:1.1.0
are released. The commits included in this version can be found here.
Important Changes since 1.0.0
- fragment-testing: The
fragment-testing
artifact provides aFragmentScenario
class for testing a fragment in isolation. See Test your app’s fragments documentation for more details. - FragmentFactory: You can now set a
FragmentFactory
on aFragmentManager
to manage the creation of fragment instances, removing the strict requirement to have a no-argument constructor. - Kotlin Property Delegates for ViewModels: The
fragment-ktx
artifact now contains two Kotlin property delegates:by viewModels()
for accessing ViewModels associated with the individual fragment andby activityViewModels()
for accessing ViewModels scoped to the activity. - Max Lifecycle: You can now set a max Lifecycle state for a Fragment by calling
setMaxLifecycle()
on aFragmentTransaction
. This replaces the now deprecatedsetUserVisibleHint()
.FragmentPagerAdapter
andFragmentStatePagerAdapter
have a new constructor that allows you to switch to the new behavior. - FragmentActivity LayoutId constructor: Subclasses of
FragmentActivity
can now optionally call into a constructor onFragmentActivity
that takes anR.layout
ID, indicating the layout that should be set as the content view as an alternative to callingsetContentView()
inonCreate()
. This does not change the requirement that your subclass have a no-argument constructor. - Fragment LayoutId constructor: Subclasses of
Fragment
can now optionally call into a constructor onFragment
that takes anR.layout
ID, indicating the layout that should be used for this fragment as an alternative to overridingonCreateView()
. The inflated layout can be configured inonViewCreated()
. - Postpone with a timeout: A new overload of
postponeEnterTransition()
has been added that takes a timeout.
Version 1.1.0-rc04
August 7, 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
, and androidx.fragment:fragment-testing:1.1.0-rc04
is released. The commits included in this version can be found here.
Bug fixes
- Fragments now correctly cancel postponed transitions on Fragments have been popped. (b/138251858)
Version 1.1.0-rc03
July 19, 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
, and androidx.fragment:fragment-testing:1.1.0-rc03
is released. The commits included in this version can be found here.
Bug fixes
- Fixed an issue where calling
postponeEnterTransition()
with a timeout more than once would not cancel previous timeouts. (b/137797118)
Version 1.1.0-rc02
July 17, 2019
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
, and androidx.fragment-testing:fragment:1.1.0-rc02
are released. The commits included in this version can be found here.
Bug fixes
- Fixed a crash in
FragmentPagerAdapter
andFragmentStatePagerAdapter
when removing the current item. (b/137209870)
Version 1.1.0-rc01
July 2, 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
, and androidx.fragment:fragment-testing:1.1.0-rc01
are released. The commits included in this version can be found here.
Bug fixes
- Fragments now properly update their visibility when using
show()
orhide()
operations while the transition is running. (b/133385058) - Fixed a
NullPointerException
when popping aFragmentTransaction
that usedsetPrimaryNavigationFragment()
beforereplace()
. (b/134673465)
Version 1.1.0-beta01
June 5, 2019
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
, and androidx.fragment:fragment-testing:1.1.0-beta01
are released. The commits included in this version can be found here.
Bug fixes
androidx.lifecycle.Lifecycle
callbacks (specifically related toSTARTED
,RESUMED
,PAUSED
,STOPPED
, andDESTROYED
) for nested Fragments are now properly nested. (b/133497591)OnBackPressedCallback
instances registered in a Fragment’sonCreate()
now properly take precedence over the child FragmentManager. (b/133175997)- Child fragments are no longer animated when their parent fragment is being replaced. (b/121017790)
- Fragments animations and transitions are now ignored when using
animateLayoutChanges="true"
, fixing an issue where Fragments were not properly destroyed. (b/116257087)
Version 1.1.0-alpha09
May 16, 2019
androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
, and androidx.fragment:fragment-testing:1.1.0-alpha09
are released. The commits included in this version can be found here.
API changes
- Fragments now receive a callback to a new
onPrimaryNavigationFragmentChanged(boolean)
method when the primary navigation fragment changes. aosp/960857
Bug fixes
- Menu Items inflated by a child Fragment are now correctly removed when the Parent Fragment is removed. b/131581013
Version 1.1.0-alpha08
May 7, 2019
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
, and androidx.fragment:fragment-testing:1.1.0-alpha08
are released. The commits included in this version can be found here.
This release is incompatible with Preferences 1.1.0-alpha01 through 1.1.0-alpha04. Please upgrade to Preferences 1.1.0-alpha05 when using this version of Fragments.
New features
- Added a new overload of
postponeEnterTransition()
that takes a timeout, after which the Fragment will automatically callstartPostponedEnterTransition()
b/120803208
API changes
- Breaking change: the previously deprecated
FragmentFactory
instantiate
method that took aBundle
has been removed. aosp/953856 - Breaking change: The
RESUME_ONLY_CURRENT_FRAGMENT
andUSE_SET_USER_VISIBLE_HINT
constants inFragmentPagerAdapter
andFragmentStatePagerAdapter
have been renamed toBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
andBEHAVIOR_SET_USER_VISIBLE_HINT
, respectively. aosp/954782
Bug fixes
- Fragments that have had their lifecycle capped via
setMaxLifecycle()
no longer get resumed before reaching their final state. b/131557151 - When using
setMaxLifecycle(Lifecycle.State.CREATED)
, Fragments will properly have their view destroyed. aosp/954180
Version 1.1.0-alpha07
April 25, 2019
androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
, and androidx.fragment:fragment-testing:1.1.0-alpha07
are released. The commits included in this version can be found here.
New features
- You can now set a max Lifecycle state for a Fragment by calling
setMaxLifecycle()
on aFragmentTransaction
. This replaces the now deprecatedsetUserVisibleHint()
.FragmentPagerAdapter
andFragmentStatePagerAdapter
have a new constructor that allows you to switch to the new behavior. (b/129780800)
API Changes
moveToState(STARTED)
onFragmentScenario
can now only be called on API 24+ devices. (b/129880016)
Behavior Changes
- As a consequence of (b/129907905), fragments on the back stack will not get a callback to
onCreateView()
when the hosting activity is recreated.onCreateView()
will now only be called when the fragment becomes visible (i.e., the back stack is popped).
Bug fixes
- Fixed an issue when using a
<fragment>
tag in XML and thecontentLayoutId
constructor ofFragmentActivity
orAppCompatActivity
. (b/129907905) - Corrected an issue where fragments on the back stack would not be moved to at least
CREATED
after a configuration change, causing ViewModels and child retained fragments to not be properly disposed. (b/129593351) - Fixed a crash in
restoreSaveState
caused by a desync of the retained fragments after the instance state is saved. (b/130433793) (aosp/947824) - Fixed issues where an
OnBackPressedCallback
added with a fragment lifecycle would not be called if theFragmentManager
had a back stack. See androidx.activity 1.0.0-alpha07 for more details. (aosp/948209) - Fragments no longer enforce
LAYER_TYPE_HARDWARE
for animations. If you specifically need a hardware layer animation, please set it as part of your animation. (b/129486478)
Version 1.1.0-alpha06
April 3, 2019
androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
, and androidx.fragment:fragment-testing:1.1.0-alpha06
are released. The commits included in this version can be found here.
New features
- Exceptions thrown by FragmentManager now include the Fragment’s name in the message. (b/67759402)
API Changes
Fragment
andFragmentActivity
now contain a second constructor that takes a@LayoutRes int
, which replaces the previous behavior of annotating your class with@ContentView
. This approach works in both app and library modules. (b/128352521)- FragmentActivity’s
onActivityResult()
is now properly marked as@CallSuper
. (b/127971684) - The FragmentFactory’s
instantiate
method that takes an argument Bundle has been deprecated and apps should use the newinstantiate
overload that does not take a Bundle. (b/128836103) FragmentScenario
methods are now properly annotated with@StyleRes
. (aosp/924193)FragmentTabHost
has been deprecated. (b/127971835)- FragmentActivity’s
getThemedContext()
has been removed. (aosp/934078)
Bug fixes
- Fixed a regression in 1.1.0-alpha05 that caused the incoming Fragment to flash on the screen. (b/129405432)
- Fixed an issue where the primary navigation fragment would be lost after a popBackStack+replace+popBackStack series of operations. (b/124332597)
- Fixed an issue when using
@ContentView
constructors on your Activity when restoring Fragment state. (b/127313094) - Corrected the logic of
setTargetFragment()
when replacing an existing target Fragment with a Fragment not yet attached to the FragmentManager. (aosp/932156)
Version 1.1.0-alpha05
March 13, 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
, and androidx.fragment:fragment-testing:1.1.0-alpha05
are released. The full list of commits included in this version can be found here.
New features
@ContentView
annotation lookups are now cached (b/123709449)
Behavior changes
- Calling
remove()
,hide()
,show()
,detach()
, andsetPrimaryNavigationFragment()
with a Fragment attached to a different FragmentManager now throws anIllegalStateException
rather than silently failing (aosp/904301)
Bug fixes
onNewIntent
forFragmentActivity
is now correctly marked with@CallSuper
(b/124120586)- Fixed an issue where
DialogFragment
’sonDismiss()
could be called twice when usinggetDialog().dismiss()
orgetDialog().cancel()
(b/126563750)
Version 1.1.0-alpha04
February 7, 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
, and androidx.fragment:fragment-testing 1.1.0-alpha04
are released.
New features
- Added support for the
@ContentView
class annotation that allows you to indicate which layout XML file should be inflated as an alternative to overridingonCreateView()
. It is recommended to do view related work inonViewCreated()
. (aosp/837619) fragment-testing
now depends onandroidx.test:core-ktx
1.1.0 stable (b/121209673)- You can now use
openActionBarOverflowOrOptionsMenu
withFragmentScenario
to test Fragment hosted options menus (b/121126668)
API changes
- Added a
requireArguments()
method which returns a@NonNull Bundle
or throws anIllegalStateException
(b/121196360) - Added a note that
getLifecycle()
,getViewLifecycleOwner()
, andgetViewLifecycleOwnerLiveData()
should not be overridden and will be made final in a future release. Please file a feature request if you are currently overriding this method. (aosp/880714) - Added a note that
getViewModelStore()
should not be overridden and will be made final in a future release. Please file a feature request if you are currently overriding this method. (aosp/880713) - Fixed an issue with binary compatibility with previous releases of Fragments. (aosp/887877) (aosp/889834)
Bug fixes
- Target fragments are correctly cleared out when you pass
null
tosetTargetFragment()
. (aosp/849969) - Fixed an issue where target Fragments were sometimes unavailable in or after
onDestroy()
. (b/122312935) - DialogFragment’s onDismiss() is now called before
onDestroy()
. (aosp/874133) (aosp/890734)
Version 1.1.0-alpha03
December 17, 2018
New features
- Fragment now implements
BundleSavedStateRegistryOwner
and depends on the newly released SavedState library [aosp/824380] - A
by activityViewModels
Kotlin property delegate has been added to retrieve ViewModels associated with the containing Activity [b/119050253] - The
by viewModels
Kotlin property delegate has been expanded to take an optional lambda method for getting theViewModelStoreOwner
, allowing you to pass in the parent Fragment or other customViewModelStoreOwner
with code such asval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
API changes
FragmentScenario
now allows you to specify a theme such asTheme.AppCompat
[b/119054431]. This is a breaking change.- Added a
requireView()
method which returns a@NonNull View
or throws anIllegalStateException
[b/120241368] - Added a
requireParentFragment()
method which returns a@NonNull Fragment
or throws anIllegalStateException
[b/112103783]
Bug fixes
- Fixed IllegalStateException: Failure saving state b/120814739
- Fragments being restored from saved instance state will now always receive a non-null
Bundle
[b/119794496] - Removed Fragments no longer reuse their
Lifecycle
object if re-added [b/118880674]
Version 1.1.0-alpha02
December 3, 2018
New features
- FragmentScenario’s Kotlin extensions now let you use a lambda for Fragment construction as an alternative to passing in a
FragmentFactory
instance. (aosp/812913)
Bug fixes
- Fixed an IllegalStateException when using nested Fragments on the back stack (b/119256498)
- Fixed crash when using
FragmentScenario.recreate()
with aFragmentFactory
(aosp/820540) - Fixed an issue where target Fragments were not accessible after the Fragment was removed (aosp/807634)
Version 1.1.0-alpha01
November 5, 2018
This is the first release of the
fragment-testing
artifact and FragmentScenario
which is built on top of the
androidx.test:core APIs. See the Fragment testing documentation for more details.
New features
- New FragmentScenario class for testing Fragments in isolation.
- You can now set a
FragmentFactory
on anyFragmentManager
to control how new Fragment instances are instantiated. - Added a new
by viewModels()
Kotlin property delegate for retrieving ViewModels from a Fragment. - Pending input events (such as clicks) are now canceled in a Fragment’s
onStop()
.
API changes
- Significantly expanded the nullability annotations across the Fragment API surface.
Bug fixes
- Fix an issue which caused Fragment operations to fail from within LiveData (b/77944637)
Known issues
- Target Fragments cannot be accessed after a Fragment has been removed from the FragmentManager.
fragment-testing
depends onandroidx.test:core:1.0.0-beta01
instead of the correctandroidx.test:core:1.0.0
.