Reputation: 360
I have a weird problem with this method. It's called, when i edit a EditTextPreference, only when i change the value, and on a MultiSelectListPreference only the first time i change. This is my fragment code.
public class PrefFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
addPreferencesFromResource(R.xml.my_preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// DO STUFF
}
@Override
public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, final Preference preference) {
// TODO Auto-generated method stub
super.onPreferenceTreeClick(preferenceScreen, preference);
// DO STUFF
}
@Override
public void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
}
and this is my_preferences.xml file
<PreferenceCategory android:title="Title1" >
<EditTextPreference
android:dialogMessage="@string/pref_pers_1_msg"
android:dialogTitle="@string/pref_pers_1"
android:key="@string/pref_pers_1_key"
android:title="@string/pref_pers_1" />
<EditTextPreference
android:dialogMessage="@string/pref_pers_2_msg"
android:dialogTitle="@string/pref_pers_2"
android:key="@string/pref_pers_2_key"
android:title="@string/pref_pers_2" />
<EditTextPreference
android:dialogMessage="@string/pref_pers_3_msg"
android:dialogTitle="@string/pref_pers_3"
android:key="@string/pref_pers_3_key"
android:title="@string/pref_pers_3" />
</PreferenceCategory>
<PreferenceCategory android:title="Title2" >
<MultiSelectListPreference
android:dialogTitle="title_dialog"
android:entries="@array/array"
android:entryValues="@array/array_elements"
android:key="pref_pers_4"
android:title="Title2" />
</PreferenceCategory>
Upvotes: 4
Views: 983
Reputation: 3
Move unregisterOnSharedPreferenceChangeListener
from onPause()
to onStop()
.
Upvotes: 0
Reputation: 881
Probably it's because the onPause() callback is called and the unregisterOnSharedPreferenceChangeListener is called.
Place Logs on both methods onResume() and onPause() to make sure that when you click, the unregister method didn't ran.
Upvotes: -1