OSDN Git Service

Revert "Revert "Give transitioning fragment a context prior to retrieving transition""
authorGeorge Mount <mount@google.com>
Thu, 3 Dec 2015 22:43:33 +0000 (14:43 -0800)
committerGeorge Mount <mount@google.com>
Fri, 4 Dec 2015 15:39:41 +0000 (07:39 -0800)
This reverts commit 214f6749fccb5e90e909ae1bdce567b83d286433.

Change-Id: Iced45f42251a82448e4dc4392315c3864494a31a

core/java/android/app/BackStackRecord.java

index 9081ef8..7126b16 100644 (file)
@@ -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,21 @@ 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.makeActive(fragment);
+                mManager.moveToState(fragment, Fragment.CREATED, 0, 0, false);
+            }
+        }
+    }
+
     private static Transition cloneTransition(Transition transition) {
         if (transition != null) {
             transition = transition.clone();