From 829c8fb2bc728cb871bc398c66ff71b56aa7ebb9 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Mon, 21 Apr 2014 11:40:21 -0700 Subject: Fix NPE java.lang.IllegalStateException: Observer com.android.settings.SettingsPreferenceFragment$1@373ee1aa is already registered. - propertly register / unregister the DataSetObserver Change-Id: I04de3c7ec14e71591edc174ebafabe9a1fb165c2 --- src/com/android/settings/SettingsPreferenceFragment.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/com/android/settings/SettingsPreferenceFragment.java') diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 6b41349..f32f8ba 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -62,6 +62,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di private String mPreferenceKey; private boolean mPreferenceHighlighted = false; + private boolean mIsDataSetObserverRegistered = false; private DataSetObserver mDataSetObserver = new DataSetObserver() { @Override public void onChanged() { @@ -112,14 +113,20 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di @Override protected void onBindPreferences() { - getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); + if (!mIsDataSetObserverRegistered) { + getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); + mIsDataSetObserverRegistered = true; + } } @Override public void onDestroy() { super.onDestroy(); - getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); + if (mIsDataSetObserverRegistered) { + getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); + mIsDataSetObserverRegistered = false; + } } public void highlightPreferenceIfNeeded() { -- cgit v1.1