summaryrefslogtreecommitdiff
path: root/core/java/android/preference
diff options
context:
space:
mode:
authorMathias Jeppsson <mathias.jeppsson@sonyericsson.com>2011-01-18 14:34:52 +0100
committerJohan Redestig <johan.redestig@sonyericsson.com>2011-01-18 14:34:52 +0100
commit190acd4dd0ffdadccd3857740e7831143ac2a496 (patch)
treef8a38b1d1ed737f6dbcbb5099323f442faa673a3 /core/java/android/preference
parent7d234fabe61cd5f034fe4ff4484209fbf5130c4d (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.java11
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);
}