diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java index 8a9cca7fdd58e..f776452a945fe 100644 --- a/core/java/android/app/SearchDialog.java +++ b/core/java/android/app/SearchDialog.java @@ -428,7 +428,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mSearchAutoComplete.setAdapter((SuggestionsAdapter)null); // close any leftover cursor if (mSuggestionsAdapter != null) { - mSuggestionsAdapter.changeCursor(null); + mSuggestionsAdapter.close(); } mSuggestionsAdapter = null; } diff --git a/core/java/android/app/SuggestionsAdapter.java b/core/java/android/app/SuggestionsAdapter.java index 52e4a1f255a2f..90f8c503607b3 100644 --- a/core/java/android/app/SuggestionsAdapter.java +++ b/core/java/android/app/SuggestionsAdapter.java @@ -65,6 +65,7 @@ class SuggestionsAdapter extends ResourceCursorAdapter { private WeakHashMap mOutsideDrawablesCache; private SparseArray mBackgroundsCache; private boolean mGlobalSearchMode; + private boolean mClosed = false; // Cached column indexes, updated when the cursor changes. private int mFormatCol; @@ -199,6 +200,12 @@ class SuggestionsAdapter extends ResourceCursorAdapter { } } + public void close() { + if (DBG) Log.d(LOG_TAG, "close()"); + changeCursor(null); + mClosed = true; + } + /** * Cache columns. */ @@ -206,6 +213,12 @@ class SuggestionsAdapter extends ResourceCursorAdapter { public void changeCursor(Cursor c) { if (DBG) Log.d(LOG_TAG, "changeCursor(" + c + ")"); + if (mClosed) { + Log.w(LOG_TAG, "Tried to change cursor after adapter was closed."); + if (c != null) c.close(); + return; + } + try { Cursor oldCursor = getCursor(); super.changeCursor(c);