Android добавя OnPreferenceChangeListener към MultiSelectListPreference(MSLP) спира работата на MSLP

Моят минимум 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;
                }
            });*/
        }
    }

Трябва да знам кога потребителят промени информацията. Виждал съм този отговор MultiSelectListPreference не съхранява стойности?, но изглежда не мога накарайте дори това да работи.

Всяка помощ се оценява, благодаря предварително!


person Andrew No    schedule 29.11.2014    source източник


Отговори (1)


Можете да видите кода на Google тук (https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/preference/MultiSelectListPreference.java). Подходящият метод е:

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

    if (positiveResult && mPreferenceChanged) {
        final Set<String> values = mNewValues;
        if (callChangeListener(values)) {
            setValues(values);
        }
    }
    mPreferenceChanged = false;
}

Така че, когато върнете false във вашия метод onPreferenceChange(), вие изрично му казвате да не запазва вашите актуализирани стойности. Върнете true и това трябва да направи това, което очаквате.

Другите публикации на SO предполагат, че има различни грешки в тази реализация на предпочитанията на различни нива на SDK. YMMV.

person John Vinopal    schedule 30.11.2015