每个设置的OnPreferenceChangeListener

时间:2010-02-10 16:15:01

标签: android android-preferences

我知道我可以这样做:

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;
        }

});

但我想为每个偏好添加一个Listener。 我试过了:

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

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

        }

});

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

2 个答案:

答案 0 :(得分:7)

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

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 :(得分:1)

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