我知道我可以这样做:
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!");
}
});
但它不起作用。 这可能吗?如果是这样,我做错了什么?
答案 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
。