每个设置的OnPreferenceChangeListener

Mac*_*rse 5 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;
        }

});
Run Code Online (Sandbox Code Playgroud)

但我想为每个偏好添加一个Listener.我试过做:

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

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

        }

});
Run Code Online (Sandbox Code Playgroud)

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

bug*_*ixr 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);
Run Code Online (Sandbox Code Playgroud)


sky*_*man 1

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