Что отличается между OnPreferenceChangeListener и OnSharedPreferenceChangeListener
Я хочу получить значение checkboxpreference. какой метод подходит для прослушивания предпочтений?
И какая реальная разница между OnPreferenceChangeListener и OnSharedPreferenceChangeListener?!
UPDATE
Почему onSharedPreferenceChanged не вызывается?
public class Setting extends PreferenceActivity implements
OnSharedPreferenceChangeListener // ,OnPreferenceChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);// deprecated warning
}
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {// DO Stuff
}
@Override
protected void onResume() {
super.onResume();
// getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
// PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
// PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
.unregisterOnSharedPreferenceChangeListener(this);
}
}
Ответы
Ответ 1
Разница между этими 2 заключается в том, что OnPreferenceChangeListener
- это обратный вызов, называемый , только когда его префикс изменяется (применяется к одному ключу), а OnSharedPreferenceChange
- это обратный вызов, вызываемый всякий раз, когда из настроек в том, что изменения объекта SharedPreferences
(применяются ко всем клавишам).
Итак, в вашем случае вам нужно использовать OnPreferenceChangeListener
с вашим CheckBoxPreference
.
Вот пример:
Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY);
ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
//Do stuff
}
});
Метод findPreference
не работает, если вы используете фрагменты, но вы не используете их, так что это нормально.