Android 每个设置的 OnPreferenceChangeListener
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2238356/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
OnPreferenceChangeListener for every setting
提问by Macarse
I know that I can do something like this:
我知道我可以做这样的事情:
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;
}
});
But I would like to add a Listener to every preference. I tried doing:
但我想为每个偏好添加一个监听器。我试着做:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
LogUtil.d("working!");
}
});
but it doesn't work. Is this possible? If so, what am I doing wrong?
但它不起作用。这可能吗?如果是这样,我做错了什么?
回答by bugfixr
Assuming you want the same listener called each time, this might be a simpler solution:
假设您希望每次都调用相同的侦听器,这可能是一个更简单的解决方案:
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);
回答by skyman
I think that onSharedPrefererenceChanged
is fired upon saving the preference (when you click BACK or HOME in PreferenceActivity
). I think that the easiest way is to create single class implementing OnPreferenceChangeListener
and switch through Preference.getKey();
and set it as OnPreferenceChangeListener
for each Preference.
我认为这onSharedPrefererenceChanged
是在保存首选项时触发的(当您在 中单击 BACK 或 HOME 时PreferenceActivity
)。我认为最简单的方法是创建单个类实现OnPreferenceChangeListener
并切换Preference.getKey();
并将其设置OnPreferenceChangeListener
为每个首选项。