OnPreferenceChangeListener для каждого параметра - PullRequest
5 голосов
/ 10 февраля 2010

Я знаю, что могу сделать что-то вроде этого:

Preference pref = findPreference(getString(R.string.pref_vibrate_on_key));
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference,
                Object newValue) {
            LogUtil.d("Working!");
            return true;
        }

});

Но я бы хотел добавить Слушателя к каждому предпочтению. Я пытался сделать:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            LogUtil.d("working!");

        }

});

но это не работает. Это возможно? Если так, что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 29 декабря 2011

Если вы хотите, чтобы каждый раз вызывался один и тот же слушатель, это может быть более простым решением:

Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() {
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // Code goes here            
        return true;
    }
};

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1));
pref1.setOnPreferenceChangeListener(changeListener);

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2));
pref2.setOnPreferenceChangeListener(changeListener);
1 голос
/ 10 февраля 2010

Я думаю, что onSharedPrefererenceChanged срабатывает при сохранении настроек (когда вы нажимаете НАЗАД или ДОМОЙ в PreferenceActivity). Я думаю, что самый простой способ - создать отдельный класс, реализующий OnPreferenceChangeListener, переключиться на Preference.getKey(); и установить его как OnPreferenceChangeListener для каждого предпочтения.

...