diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 82206ea998ea1..d50483e4a3f42 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -460,6 +460,9 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene // If set this fragment is being retained across the current config change. boolean mRetaining; + // If set this fragment's loaders are being retained across the current config change. + boolean mRetainLoader; + // If set this fragment has menu items to contribute. boolean mHasMenu; @@ -2401,7 +2404,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false); } if (mLoaderManager != null) { - if (mRetaining) { + if (mRetainLoader) { mLoaderManager.doRetain(); } else { mLoaderManager.doStop(); diff --git a/core/java/android/app/FragmentController.java b/core/java/android/app/FragmentController.java index 28dadfa78b32b..1b45137fb7c94 100644 --- a/core/java/android/app/FragmentController.java +++ b/core/java/android/app/FragmentController.java @@ -341,6 +341,7 @@ public class FragmentController { */ public void doLoaderStop(boolean retain) { mHost.doLoaderStop(retain); + mHost.mFragmentManager.setRetainLoader(retain); } /** diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 132ffef861e65..51d613247c870 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -869,6 +869,17 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate } } + void setRetainLoader(boolean retain) { + if (mActive != null) { + for (int i=0; i