Fix NPE java.lang.IllegalStateException: Observer com.android.settings.SettingsPreferenceFragment$1@373ee1aa is already registered.

- propertly register / unregister the DataSetObserver

Change-Id: I04de3c7ec14e71591edc174ebafabe9a1fb165c2
This commit is contained in:
Fabrice Di Meglio
2014-04-21 11:40:21 -07:00
parent 131f49feea
commit 829c8fb2bc

View File

@@ -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() {