Merge "Retain fragment loaders" into mnc-dr-dev
This commit is contained in:
@@ -460,9 +460,6 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
|
|||||||
// If set this fragment is being retained across the current config change.
|
// If set this fragment is being retained across the current config change.
|
||||||
boolean mRetaining;
|
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.
|
// If set this fragment has menu items to contribute.
|
||||||
boolean mHasMenu;
|
boolean mHasMenu;
|
||||||
|
|
||||||
@@ -2404,7 +2401,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
|
|||||||
mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
|
mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
|
||||||
}
|
}
|
||||||
if (mLoaderManager != null) {
|
if (mLoaderManager != null) {
|
||||||
if (mRetainLoader) {
|
if (mHost.getRetainLoaders()) {
|
||||||
mLoaderManager.doRetain();
|
mLoaderManager.doRetain();
|
||||||
} else {
|
} else {
|
||||||
mLoaderManager.doStop();
|
mLoaderManager.doStop();
|
||||||
|
|||||||
@@ -341,7 +341,6 @@ public class FragmentController {
|
|||||||
*/
|
*/
|
||||||
public void doLoaderStop(boolean retain) {
|
public void doLoaderStop(boolean retain) {
|
||||||
mHost.doLoaderStop(retain);
|
mHost.doLoaderStop(retain);
|
||||||
mHost.mFragmentManager.setRetainLoader(retain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -42,9 +42,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
|
|||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
final int mWindowAnimations;
|
final int mWindowAnimations;
|
||||||
final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
|
final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
|
||||||
|
/** The loader managers for individual fragments [i.e. Fragment#getLoaderManager()] */
|
||||||
private ArrayMap<String, LoaderManager> mAllLoaderManagers;
|
private ArrayMap<String, LoaderManager> mAllLoaderManagers;
|
||||||
|
/** Whether or not fragment loaders should retain their state */
|
||||||
|
private boolean mRetainLoaders;
|
||||||
|
/** The loader manger for the fragment host [i.e. Activity#getLoaderManager()] */
|
||||||
private LoaderManagerImpl mLoaderManager;
|
private LoaderManagerImpl mLoaderManager;
|
||||||
private boolean mCheckedForLoaderManager;
|
private boolean mCheckedForLoaderManager;
|
||||||
|
/** Whether or not the fragment host loader manager was started */
|
||||||
private boolean mLoadersStarted;
|
private boolean mLoadersStarted;
|
||||||
|
|
||||||
public FragmentHostCallback(Context context, Handler handler, int windowAnimations) {
|
public FragmentHostCallback(Context context, Handler handler, int windowAnimations) {
|
||||||
@@ -166,6 +171,10 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean getRetainLoaders() {
|
||||||
|
return mRetainLoaders;
|
||||||
|
}
|
||||||
|
|
||||||
Activity getActivity() {
|
Activity getActivity() {
|
||||||
return mActivity;
|
return mActivity;
|
||||||
}
|
}
|
||||||
@@ -217,6 +226,8 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void doLoaderStop(boolean retain) {
|
void doLoaderStop(boolean retain) {
|
||||||
|
mRetainLoaders = retain;
|
||||||
|
|
||||||
if (mLoaderManager == null) {
|
if (mLoaderManager == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -869,17 +869,6 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setRetainLoader(boolean retain) {
|
|
||||||
if (mActive != null) {
|
|
||||||
for (int i=0; i<mActive.size(); i++) {
|
|
||||||
Fragment f = mActive.get(i);
|
|
||||||
if (f != null) {
|
|
||||||
f.mRetainLoader = retain;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void moveToState(Fragment f, int newState, int transit, int transitionStyle,
|
void moveToState(Fragment f, int newState, int transit, int transitionStyle,
|
||||||
boolean keepActive) {
|
boolean keepActive) {
|
||||||
if (DEBUG && false) Log.v(TAG, "moveToState: " + f
|
if (DEBUG && false) Log.v(TAG, "moveToState: " + f
|
||||||
|
|||||||
Reference in New Issue
Block a user