Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
It could easy to reproduce when turning on "Don't keep activities".
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit ba0c19707915ff87d9cac2089fcd166bb5cca17d
Author: Ian Lake <ilake@google.com>
Date: Wed Nov 14 16:20:28 2018
Set the correct FragmentManager on active Fragments
All active Fragments should have the correct
FragmentManager set instead of always using the
Activity's FragmentManager.
While added Fragments have their FragmentManager
set correctly in moveToState(), active Fragments
weren't being set correctly, causing issues when
attempting to save the state of the FragmentManager.
Test: new FragmentLifecycleTest
BUG: 119256498
Change-Id: I830f729d93f00859509a0844fae19752342e6ccc
M fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.java
M fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
M fragment/src/main/java/androidx/fragment/app/FragmentState.java
https://android-review.googlesource.com/826954
https://goto.google.com/android-sha1/ba0c19707915ff87d9cac2089fcd166bb5cca17d
Branch: androidx-master-dev
commit ba0c19707915ff87d9cac2089fcd166bb5cca17d
Author: Ian Lake <ilake@google.com>
Date: Wed Nov 14 16:20:28 2018
Set the correct FragmentManager on active Fragments
All active Fragments should have the correct
FragmentManager set instead of always using the
Activity's FragmentManager.
While added Fragments have their FragmentManager
set correctly in moveToState(), active Fragments
weren't being set correctly, causing issues when
attempting to save the state of the FragmentManager.
Test: new FragmentLifecycleTest
BUG: 119256498
Change-Id: I830f729d93f00859509a0844fae19752342e6ccc
M fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.java
M fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
M fragment/src/main/java/androidx/fragment/app/FragmentState.java
ap...@google.com <ap...@google.com> #4
Thanks Ian! Looking forward to a new alpha release ASAP rather than monthly release.😅
ap...@google.com <ap...@google.com> #5
Thanks for fixing this!
ap...@google.com <ap...@google.com> #6
Wondering is there any release plan?
ap...@google.com <ap...@google.com> #7
Fragments 1.1.0-alpha02 is out now with this fix.
ap...@google.com <ap...@google.com> #8
Does Preferences also depend on Fragments? In which case when will that be updated to 1.1.0-alpha02? Or is the recommended practice to specify both Preferences and Fragments in build.gradle so that we can force Fragments 1.1.0-alpha02?
jb...@google.com <jb...@google.com>
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #9
Re #8 - yes, if you need a specific version of Fragments, you should specify both Preferences and Fragments in your build.gradle.
The release schedule of AndroidX components is completely independent of one another, so Preferences will only get a new version when there's something new to release in Preferences.
The release schedule of AndroidX components is completely independent of one another, so Preferences will only get a new version when there's something new to release in Preferences.
ap...@google.com <ap...@google.com> #10
So, in general it sounds like if an androidx dependency (such as preference) is added to build.gradle, then any dependencies of that (e.g. fragment) should also be explicitly added so that the specific version can be specified. Is that right?
In other words, when we explicitly include preference-1.1.0-alpha01 we need to be aware that the fragment-alpha1.1.0-alpha01 is automatically being brought in and so might affect the fragment behaviour. Sorry, I know this is rather OT.
In other words, when we explicitly include preference-1.1.0-alpha01 we need to be aware that the fragment-alpha1.1.0-alpha01 is automatically being brought in and so might affect the fragment behaviour. Sorry, I know this is rather OT.
ap...@google.com <ap...@google.com> #11
Thanks, fix confirmed
ap...@google.com <ap...@google.com> #12
alpha02 version of fragments didn't fix this for me. Is there another solution?
ap...@google.com <ap...@google.com> #13
Re #12 - you're most likely hitting https://issuetracker.google.com/issues/120814739 - a related but separate issue fixed for alpha03
ap...@google.com <ap...@google.com> #14
Run
ap...@google.com <ap...@google.com> #15
Run
ap...@google.com <ap...@google.com> #16
Run
ap...@google.com <ap...@google.com> #17
This seems to be fixed now.
Using this:
implementation 'androidx.preference:preference:1.1.0-alpha05'
Using this:
implementation 'androidx.preference:preference:1.1.0-alpha05'
il...@google.com <il...@google.com> #18
The saved state of Fragments has been split entirely between private library state (custom Parcelable
classes) and state provided by you, the developer, which is now always stored in a Bundle
that allows determining exactly which part of the fragment's state is too large.
The final structure is as follows:
In the Activity's onSaveInstanceState
, the "android:support:fragments"
key now contains a Bundle that contains the following information:
"state"
- the privateParcelable
storing theFragmentManager
's saved state (e.g., the fragment back stack info)- For each
that has been set viaFragment Result setFragmentResult
but has not yet been delivered:"result_$name"
-> (user defined Bundle) - For each Fragment (where the
fragment_id
matches the UUIDs found in the ):debug logging "fragment_$fragment_id"
-> Bundle"state"
-> the privateParcelable
storing theFragment
's saved state (e.g., the class name, max lifecycle, etc.)"arguments"
-> (Bundle of arguments)"savedInstanceState"
-> (onSaveInstanceState
filled Bundle)"registryState"
-> (SavedStateRegistry
filled Bundle)"childFragmentManager"
-> The “android:support:fragments” equivalent Bundle of the childFragmentManager
, which would lead us recursively down the tree"viewState"
-> theSparseArray<Parcelable>
returned byView.saveHierarchyState
representing theFragment View state "viewRegistryState"
-> (ViewSavedStateRegistry
filled Bundle)
This will be fully available in Fragment 1.6.0-alpha01.
Description
Component used: Fragment
Version used: 1.4.0
There are tools like toolargetool that let you explore what is taking up space in your saved instance state. However, it has no visibility into custom Parcelables like the
FragmentManagerState
used to store the entire FragmentManager's hierarchy of saved state.This makes it hard to differentiate between the state of the FragmentManager itself and the state of each individual fragment, and, within a particular fragment, differentiating the view state, arguments, state provided by
onSaveInstanceState()
, and the fragment'sSavedStateRegistry
.Therefore the focus should be on exposing the hierarchy of fragments - the bookkeeping associated with an individual Fragment and the FragmentManager specific state can and should remain as separate Parcelable instances that don't expose their internal fields.