diff options
| author | 2015-11-30 10:55:20 -0800 | |
|---|---|---|
| committer | 2015-11-30 10:55:20 -0800 | |
| commit | 2b2d23aa706c2d8efb05e15f08bdc41883a4a651 (patch) | |
| tree | f51894c29ad3fcc2e3963f1b91f88db6bcfc040e | |
| parent | 734d399382f33b5683ad9ae70e6173e3e002a347 (diff) | |
Give transitioning fragment a context prior to retrieving transition
Bug 23688972
An incoming fragment that is going to execute a transition may
need to have a context in order to load the transition. This
CL moves the state of incoming fragments to CREATED prior to
getting their Transitions.
Change-Id: I08b8cda479f7542fb326aa4f0f62a07ccc5662b0
| -rw-r--r-- | core/java/android/app/BackStackRecord.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java index 9081ef8a1d1a..754a5710191b 100644 --- a/core/java/android/app/BackStackRecord.java +++ b/core/java/android/app/BackStackRecord.java @@ -957,6 +957,7 @@ final class BackStackRecord extends FragmentTransaction implements */ private TransitionState beginTransition(SparseArray<Fragment> firstOutFragments, SparseArray<Fragment> lastInFragments, boolean isBack) { + ensureFragmentsAreInitialized(lastInFragments); TransitionState state = new TransitionState(); // Adding a non-existent target view makes sure that the transitions don't target @@ -982,6 +983,20 @@ final class BackStackRecord extends FragmentTransaction implements return state; } + /** + * Ensure that fragments that are entering are at least at the CREATED state + * so that they may load Transitions using TransitionInflater. + */ + private void ensureFragmentsAreInitialized(SparseArray<Fragment> lastInFragments) { + final int count = lastInFragments.size(); + for (int i = 0; i < count; i++) { + final Fragment fragment = lastInFragments.valueAt(i); + if (fragment.mState < Fragment.CREATED) { + mManager.moveToState(fragment, Fragment.CREATED, 0, 0, false); + } + } + } + private static Transition cloneTransition(Transition transition) { if (transition != null) { transition = transition.clone(); |