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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 05:06:32  来源:igfitidea点击:

OnPreferenceChangeListener for every setting

androidandroid-preferences

提问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 onSharedPrefererenceChangedis 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 OnPreferenceChangeListenerand switch through Preference.getKey();and set it as OnPreferenceChangeListenerfor each Preference.

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