package it.demo.twitterlike.android.ui.fragments; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; public class AbstractSettingFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { private final String[] mAutoSummaryFields; private final int mEntryCount; private Preference[] mPreferenceEntries; private final int preferenceResouceId; private boolean valueChanged; public AbstractSettingFragment(int preferenceResouceId, String... mAutoSummaryFields) { this.mAutoSummaryFields = mAutoSummaryFields; this.mEntryCount = mAutoSummaryFields.length; this.preferenceResouceId = preferenceResouceId; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); // Load the preferences from an XML resource addPreferencesFromResource(preferenceResouceId); mPreferenceEntries = new Preference[mEntryCount]; for (int i = 0; i < mEntryCount; i++) { mPreferenceEntries[i] = getPreferenceScreen().findPreference( mAutoSummaryFields[i]); } } public boolean isValueChanged() { return this.valueChanged; } @Override public void onResume() { super.onResume(); for (int i = 0; i < mEntryCount; i++) { updateSummary(mAutoSummaryFields[i]); // initialization } getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); // register // change // listener } @Override public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); // unregister // change // listener } private void updateSummary(String key) { for (int i = 0; i < mEntryCount; i++) { if (key.equals(mAutoSummaryFields[i])) { if (mPreferenceEntries[i] instanceof EditTextPreference) { final EditTextPreference currentPreference = (EditTextPreference) mPreferenceEntries[i]; mPreferenceEntries[i].setSummary(currentPreference .getText()); } else if (mPreferenceEntries[i] instanceof ListPreference) { final ListPreference currentPreference = (ListPreference) mPreferenceEntries[i]; mPreferenceEntries[i].setSummary(currentPreference .getEntry()); } break; } } } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { updateSummary(key); this.valueChanged = true; } }