summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/SettingsPreferenceFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/SettingsPreferenceFragment.java')
-rw-r--r--src/com/android/settings/SettingsPreferenceFragment.java26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index f89b72e..83b3a68 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -66,7 +66,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
private boolean mPreferenceHighlighted = false;
private Drawable mHighlightDrawable;
- private Object mRegisterLock = new Object();
+ private ListAdapter mCurrentRootAdapter;
private boolean mIsDataSetObserverRegistered = false;
private DataSetObserver mDataSetObserver = new DataSetObserver() {
@Override
@@ -147,6 +147,11 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
}
@Override
+ protected void onUnbindPreferences() {
+ unregisterObserverIfNeeded();
+ }
+
+ @Override
public void onStop() {
super.onStop();
@@ -154,20 +159,23 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
}
public void registerObserverIfNeeded() {
- synchronized (mRegisterLock) {
- if (!mIsDataSetObserverRegistered) {
- getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver);
- mIsDataSetObserverRegistered = true;
+ if (!mIsDataSetObserverRegistered) {
+ if (mCurrentRootAdapter != null) {
+ mCurrentRootAdapter.unregisterDataSetObserver(mDataSetObserver);
}
+ mCurrentRootAdapter = getPreferenceScreen().getRootAdapter();
+ mCurrentRootAdapter.registerDataSetObserver(mDataSetObserver);
+ mIsDataSetObserverRegistered = true;
}
}
public void unregisterObserverIfNeeded() {
- synchronized (mRegisterLock) {
- if (mIsDataSetObserverRegistered) {
- getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver);
- mIsDataSetObserverRegistered = false;
+ if (mIsDataSetObserverRegistered) {
+ if (mCurrentRootAdapter != null) {
+ mCurrentRootAdapter.unregisterDataSetObserver(mDataSetObserver);
+ mCurrentRootAdapter = null;
}
+ mIsDataSetObserverRegistered = false;
}
}