diff options
Diffstat (limited to 'src/com/android/settings/SettingsPreferenceFragment.java')
-rw-r--r-- | src/com/android/settings/SettingsPreferenceFragment.java | 26 |
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; } } |