Что отличается между 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 не работает, если вы используете фрагменты, но вы не используете их, так что это нормально.