Android SwitchPreference не работает

Я пытаюсь получить значение SwitchPreference с помощью SharedPreferences, но это не работает. Я использую SwitchPreference, чтобы пользователь мог включать / выключать уведомления, но он показывает уведомления независимо от того, какое значение это имеет. Вот код

NotificationUtils.java

SharedPreferences preferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
    if (preferences.getBoolean("notification_key", true)) {
        notificationManager.notify(NOTIFICATION_ID + rowId, notBuilder.build());
    }

preferences.xml

<SwitchPreference
    android:contentDescription="Turn notifications on/off"
    android:defaultValue="true"
    android:key="notification_key"
    android:summaryOff="Off"
    android:summaryOn="On"
    android:title="Notifications" />

Я также переопределил и зарегистрировал слушатель OnSharedPreferenceChange в SettingsFragment.java.

2 ответа

Решение

Я решил это, на самом деле значение не переключалось, на экране настроек Switch выключался и включался, но значение оставалось по умолчанию. Решил это, установив новое значение в OnPreferenceChangeListener, и это сработало.

Попробуйте заменить

SharedPreferences preferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);

с

PreferenceManager.getDefaultSharedPreferences(context);

Я полагаю, вы пытаетесь получить "notification_key" от неправильного SharedPreferences Именно поэтому он всегда использует значение по умолчанию true и показывая ваше уведомление.

Изменить: Вы можете проверить, является ли SharedPreferences вы используете содержит ключ "messages_key" с contains() метод.