diff options
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/LoaderManager.java | 14 | ||||
-rw-r--r-- | core/java/android/content/CursorLoader.java | 17 |
2 files changed, 28 insertions, 3 deletions
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java index cccf6e8..7125054 100644 --- a/core/java/android/app/LoaderManager.java +++ b/core/java/android/app/LoaderManager.java @@ -147,7 +147,10 @@ public abstract class LoaderManager { LoaderManager.LoaderCallbacks<D> callback); /** - * Stops and removes the loader with the given ID. + * Stops and removes the loader with the given ID. If this loader + * had previously reported data to the client through + * {@link LoaderCallbacks#onLoadFinished(Loader, Object)}, a call + * will be made to {@link LoaderCallbacks#onLoaderReset(Loader)}. */ public abstract void destroyLoader(int id); @@ -397,7 +400,8 @@ class LoaderManagerImpl extends LoaderManager { writer.print(prefix); writer.print("mData="); writer.println(mData); writer.print(prefix); writer.print("mStarted="); writer.print(mStarted); writer.print(" mRetaining="); writer.print(mRetaining); - writer.print(" mDestroyed="); writer.print(mDestroyed); + writer.print(" mDestroyed="); writer.println(mDestroyed); + writer.print(prefix); writer.print("mNeedReset="); writer.print(mNeedReset); writer.print(" mListenerRegistered="); writer.println(mListenerRegistered); } } @@ -491,6 +495,12 @@ class LoaderManagerImpl extends LoaderManager { mLoaders.removeAt(idx); info.destroy(); } + idx = mInactiveLoaders.indexOfKey(id); + if (idx >= 0) { + LoaderInfo info = mInactiveLoaders.valueAt(idx); + mInactiveLoaders.removeAt(idx); + info.destroy(); + } } @SuppressWarnings("unchecked") diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java index c73f95d..9e03c25 100644 --- a/core/java/android/content/CursorLoader.java +++ b/core/java/android/content/CursorLoader.java @@ -27,6 +27,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { Cursor mCursor; ForceLoadContentObserver mObserver; boolean mStopped; + boolean mContentChanged; boolean mReset; Uri mUri; String[] mProjection; @@ -102,7 +103,9 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { if (mCursor != null) { deliverResult(mCursor); - } else { + } + if (mCursor == null || mContentChanged) { + mContentChanged = false; forceLoad(); } } @@ -120,6 +123,18 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { } @Override + public void onContentChanged() { + if (mStopped) { + // This loader has been stopped, so we don't want to load + // new data right now... but keep track of it changing to + // refresh later if we start again. + mContentChanged = true; + return; + } + super.onContentChanged(); + } + + @Override public void onCancelled(Cursor cursor) { if (cursor != null && !cursor.isClosed()) { cursor.close(); |