@@ -726,11 +726,12 @@ public void performPendingDeferredStart(Fragment f) {
726726 return ;
727727 }
728728 f .mDeferStart = false ;
729- moveToState (f , mCurState , 0 , 0 );
729+ moveToState (f , mCurState , 0 , 0 , false );
730730 }
731731 }
732732
733- void moveToState (Fragment f , int newState , int transit , int transitionStyle ) {
733+ void moveToState (Fragment f , int newState , int transit , int transitionStyle ,
734+ boolean keepActive ) {
734735 // Fragments that are not currently added will sit in the onCreate() state.
735736 if (!f .mAdded && newState > Fragment .CREATED ) {
736737 newState = Fragment .CREATED ;
@@ -757,7 +758,7 @@ void moveToState(Fragment f, int newState, int transit, int transitionStyle) {
757758 // animation, move to whatever the final state should be once
758759 // the animation is done, and then we can proceed from there.
759760 f .mAnimatingAway = null ;
760- moveToState (f , f .mStateAfterAnimating , 0 , 0 );
761+ moveToState (f , f .mStateAfterAnimating , 0 , 0 , true );
761762 }
762763 switch (f .mState ) {
763764 case Fragment .INITIALIZING :
@@ -940,7 +941,7 @@ public void onAnimationEnd(Animator anim) {
940941 if (fragment .mAnimatingAway != null ) {
941942 fragment .mAnimatingAway = null ;
942943 moveToState (fragment , fragment .mStateAfterAnimating ,
943- 0 , 0 );
944+ 0 , 0 , false );
944945 }
945946 }
946947 });
@@ -992,11 +993,13 @@ public void onAnimationEnd(Animator anim) {
992993 throw new SuperNotCalledException ("Fragment " + f
993994 + " did not call through to super.onDetach()" );
994995 }
995- if (!f .mRetaining ) {
996- makeInactive (f );
997- } else {
998- f .mActivity = null ;
999- f .mFragmentManager = null ;
996+ if (!keepActive ) {
997+ if (!f .mRetaining ) {
998+ makeInactive (f );
999+ } else {
1000+ f .mActivity = null ;
1001+ f .mFragmentManager = null ;
1002+ }
10001003 }
10011004 }
10021005 }
@@ -1007,7 +1010,7 @@ public void onAnimationEnd(Animator anim) {
10071010 }
10081011
10091012 void moveToState (Fragment f ) {
1010- moveToState (f , mCurState , 0 , 0 );
1013+ moveToState (f , mCurState , 0 , 0 , false );
10111014 }
10121015
10131016 void moveToState (int newState , boolean always ) {
@@ -1029,7 +1032,7 @@ void moveToState(int newState, int transit, int transitStyle, boolean always) {
10291032 for (int i =0 ; i <mActive .size (); i ++) {
10301033 Fragment f = mActive .get (i );
10311034 if (f != null ) {
1032- moveToState (f , newState , transit , transitStyle );
1035+ moveToState (f , newState , transit , transitStyle , false );
10331036 if (f .mLoaderManager != null ) {
10341037 loadersRunning |= f .mLoaderManager .hasRunningLoaders ();
10351038 }
@@ -1122,7 +1125,7 @@ public void removeFragment(Fragment fragment, int transition, int transitionStyl
11221125 fragment .mAdded = false ;
11231126 fragment .mRemoving = true ;
11241127 moveToState (fragment , inactive ? Fragment .INITIALIZING : Fragment .CREATED ,
1125- transition , transitionStyle );
1128+ transition , transitionStyle , false );
11261129 }
11271130 }
11281131
@@ -1189,7 +1192,7 @@ public void detachFragment(Fragment fragment, int transition, int transitionStyl
11891192 mNeedMenuInvalidate = true ;
11901193 }
11911194 fragment .mAdded = false ;
1192- moveToState (fragment , Fragment .CREATED , transition , transitionStyle );
1195+ moveToState (fragment , Fragment .CREATED , transition , transitionStyle , false );
11931196 }
11941197 }
11951198 }
@@ -1204,7 +1207,7 @@ public void attachFragment(Fragment fragment, int transition, int transitionStyl
12041207 if (fragment .mHasMenu && fragment .mMenuVisible ) {
12051208 mNeedMenuInvalidate = true ;
12061209 }
1207- moveToState (fragment , mCurState , transition , transitionStyle );
1210+ moveToState (fragment , mCurState , transition , transitionStyle , false );
12081211 }
12091212 }
12101213 }
0 commit comments