【问题标题】:OnPreferenceChangeListener for every setting每个设置的 OnPreferenceChange 侦听器
【发布时间】:2010-02-10 16:15:00
【问题描述】:

我知道我可以这样做:

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

});

但我想为每个偏好添加一个监听器。 我试着做:

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

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

        }

});

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

【问题讨论】:

  • Here 是你做错了什么 - 对吧?

标签: android android-preferences


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • onSharedPreferenceChanged 不会在 BACK/HOME 上被调用。 (甚至离开活动)
    • developer.android.com/guide/topics/ui/settings.html#Listening 描述了这种方法。 @YoushaAleayoub 你确定监听器在launchig PreferenceActivity 之后仍然注册并且它注册到相同的SharedPreferences 吗?
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多