6

我知道我可以做这样的事情:

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!");

        }

});

但它不起作用。这可能吗?如果是这样,我做错了什么?

4

2 回答 2

8

假设您希望每次都调用相同的侦听器,这可能是一个更简单的解决方案:

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);
于 2011-12-29T13:25:04.330 回答
1

我认为这onSharedPrefererenceChanged是在保存首选项时触发的(当您单击 BACK 或 HOME 时PreferenceActivity)。我认为最简单的方法是创建单个类实现OnPreferenceChangeListener并切换Preference.getKey();并将其设置OnPreferenceChangeListener为每个首选项。

于 2010-02-10T16:22:25.550 回答