Android将OnPreferenceChangeListener添加到MultiSelectListPreference(MSLP)会停止MSLP的工作

Android将OnPreferenceChangeListener添加到MultiSelectListPreference(MSLP)会停止MSLP的工作,android,debugging,listener,Android,Debugging,Listener,我的最小SDK是Android 4.0。当我尝试将OnPreferenceChangeListener添加到MultiSelectListPreference时,它会阻止MSLP存储更改的值。没有监听器,它工作得很好,即使我的代码被注释掉,它似乎也失败了 private void init () { MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("rep

我的最小SDK是Android 4.0。当我尝试将OnPreferenceChangeListener添加到MultiSelectListPreference时,它会阻止MSLP存储更改的值。没有监听器,它工作得很好,即使我的代码被注释掉,它似乎也失败了

private void init () {
    MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("repeat_days");
    if (multiSelectListPref != null) {

/* Works fine if this is commented out
            multiSelectListPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    //formatSummary((MultiSelectListPreference) preference, newValue);
                    return false;
                }
            });*/
        }
    }
我需要知道用户何时更改信息。我看到了这种反应 但我似乎连这个都做不到


感谢您的帮助,提前谢谢

你可以在这里查看谷歌的代码()。相关的方法是:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult && mPreferenceChanged) {
        final Set<String> values = mNewValues;
        if (callChangeListener(values)) {
            setValues(values);
        }
    }
    mPreferenceChanged = false;
}
@覆盖
受保护的无效onDialogClosed(布尔正结果){
super.onDialogClosed(阳性结果);
if(正结果和mPreferenceChanged){
最终设定值=MNEW值;
if(callChangeListener(值)){
设置值(值);
}
}
mPreferenceChanged=false;
}
因此,当您在onPreferenceChange()方法中返回false时,您显式地告诉它不要保存更新的值。返回true,这应该满足您的期望

其他SO帖子表明,在不同SDK级别的首选项实现中存在各种错误。YMMV