diff options
| author | Mathias Jeppsson <mathias.jeppsson@sonyericsson.com> | 2011-01-18 14:34:52 +0100 |
|---|---|---|
| committer | Johan Redestig <johan.redestig@sonyericsson.com> | 2011-01-18 14:34:52 +0100 |
| commit | 190acd4dd0ffdadccd3857740e7831143ac2a496 (patch) | |
| tree | f8a38b1d1ed737f6dbcbb5099323f442faa673a3 /core/java/android/preference | |
| parent | 7d234fabe61cd5f034fe4ff4484209fbf5130c4d (diff) | |
Fixing memory leak in PreferenceScreen.
Every time the PreferenceScreen is displayed a new ListView is
created and bound to the adapter. As the same adapter is used during
the lifetime of PreferenceScreen and the listviews never gets
unbound, the adapter will contain a list of unused views. The old view
should be unbound from adapter when we create a new view.
Change-Id: I13e2d0dc79c8ff79b58efa650653e3f84c6e53c5
Diffstat (limited to 'core/java/android/preference')
| -rw-r--r-- | core/java/android/preference/PreferenceScreen.java | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java index 95e54324f445..fae5f1ae17bb 100644 --- a/core/java/android/preference/PreferenceScreen.java +++ b/core/java/android/preference/PreferenceScreen.java @@ -80,6 +80,8 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi private ListAdapter mRootAdapter; private Dialog mDialog; + + private ListView mListView; /** * Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}. @@ -145,15 +147,18 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi private void showDialog(Bundle state) { Context context = getContext(); - ListView listView = new ListView(context); - bind(listView); + if (mListView != null) { + mListView.setAdapter(null); + } + mListView = new ListView(context); + bind(mListView); // Set the title bar if title is available, else no title bar final CharSequence title = getTitle(); Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title) ? com.android.internal.R.style.Theme_NoTitleBar : com.android.internal.R.style.Theme); - dialog.setContentView(listView); + dialog.setContentView(mListView); if (!TextUtils.isEmpty(title)) { dialog.setTitle(title); } |
