Сохранение boolean в SharedPreferences

360
20 июня 2017, 23:38

В активити есть два элемента CheckBox, значение которых я сохраняю в SharedPreferences. Возникла проблема - при изменении одного из них, изменяется записанное значение во втором. Т.е. я захожу в активити, ставлю галочку в первый CheckBox, выхожу назад, захожу опять в активити и галочка уже стоит в обоих CheckBox. Ниже приведен код сохранения значения и проверки значения при открытии активити. Из-за чего может проявиться такая ошибка?

Сохранение:

    boldCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) typeface += Typeface.BOLD;
            else typeface -= Typeface.BOLD;
            tv.setTypeface(null, typeface);
            SharedPreferences.Editor editor = mSettings.edit();
            editor.putBoolean(APP_PREFERENCES_BOLD, isChecked);
            editor.apply();
            Log.d(TAG, "bold write " + isChecked);
        }
    });
    italicCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) typeface += Typeface.ITALIC;
            else typeface -= Typeface.ITALIC;
            tv.setTypeface(null, typeface);
            SharedPreferences.Editor editor = mSettings.edit();
            editor.putBoolean(APP_PREFERENCES_ITALIC, isChecked);
            editor.apply();
            Log.d(TAG, "italic write " + isChecked);
        }
    });
} 

Проверка значений при открытии активити:

if (mSettings.contains(APP_PREFERENCES_BOLD) | mSettings.contains(APP_PREFERENCES_ITALIC)) {
        if (mSettings.getBoolean(APP_PREFERENCES_BOLD, false)) {
            Log.d(TAG, "APP_PREFERENCES_BOLD == " + mSettings.getBoolean(APP_PREFERENCES_BOLD, false));
            typeface += Typeface.BOLD;
            boldCheckBox.setChecked(true);
        }
        if (mSettings.getBoolean(APP_PREFERENCES_ITALIC, false)) {
            Log.d(TAG, "APP_PREFERENCES_ITALIC == " + mSettings.getBoolean(APP_PREFERENCES_ITALIC, false));
            typeface += Typeface.ITALIC;
            italicCheckBox.setChecked(true);
        }
        tv.setTypeface(null, typeface);
    }
READ ALSO
Как учесть обновление приложения?

Как учесть обновление приложения?

Собираюсь выложить приложение на PlayMarket, с последующим его обновлением

237
Как передать коллекцию из Thymeleaf в контроллер?

Как передать коллекцию из Thymeleaf в контроллер?

Добрый день возникла такая проблема

351