diff options
| author | 2017-03-06 19:31:25 +0000 | |
|---|---|---|
| committer | 2017-03-06 19:31:30 +0000 | |
| commit | 3a471757788678ac9abe8da5032e1aec442a7ca1 (patch) | |
| tree | 3e244f9bf11c2bc9da4377c7d780671ed78f62e5 | |
| parent | b85f02e9add59192b4d45ec3b52f9c01747edfc2 (diff) | |
| parent | e6f7daeb469ee4242416270b803e06909436d90e (diff) | |
Merge "Fix Loader bugs"
| -rw-r--r-- | core/java/android/app/FragmentHostCallback.java | 12 | ||||
| -rw-r--r-- | core/java/android/app/FragmentManager.java | 14 | ||||
| -rw-r--r-- | core/java/android/app/LoaderManager.java | 1 |
3 files changed, 14 insertions, 13 deletions
diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java index 7e415e9f2f4b..41a885eeb7f0 100644 --- a/core/java/android/app/FragmentHostCallback.java +++ b/core/java/android/app/FragmentHostCallback.java @@ -308,13 +308,11 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer { mAllLoaderManagers = new ArrayMap<String, LoaderManager>(); } LoaderManagerImpl lm = (LoaderManagerImpl) mAllLoaderManagers.get(who); - if (lm == null) { - if (create) { - lm = new LoaderManagerImpl(who, this, started); - mAllLoaderManagers.put(who, lm); - } - } else { - lm.updateHostController(this); + if (lm == null && create) { + lm = new LoaderManagerImpl(who, this, started); + mAllLoaderManagers.put(who, lm); + } else if (started && lm != null && !lm.mStarted){ + lm.doStart(); } return lm; } diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 977931a66e1e..0672e3bc13a8 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -1536,12 +1536,14 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate boolean loadersRunning = false; // Must add them in the proper order. mActive fragments may be out of order - final int numAdded = mAdded.size(); - for (int i = 0; i < numAdded; i++) { - Fragment f = mAdded.get(i); - moveFragmentToExpectedState(f); - if (f.mLoaderManager != null) { - loadersRunning |= f.mLoaderManager.hasRunningLoaders(); + if (mAdded != null) { + final int numAdded = mAdded.size(); + for (int i = 0; i < numAdded; i++) { + Fragment f = mAdded.get(i); + moveFragmentToExpectedState(f); + if (f.mLoaderManager != null) { + loadersRunning |= f.mLoaderManager.hasRunningLoaders(); + } } } diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java index bedf31a22f26..56dfc589b0a7 100644 --- a/core/java/android/app/LoaderManager.java +++ b/core/java/android/app/LoaderManager.java @@ -852,6 +852,7 @@ class LoaderManagerImpl extends LoaderManager { mInactiveLoaders.valueAt(i).destroy(); } mInactiveLoaders.clear(); + mHost = null; } @Override |