Сохранение Состояния Переключателя В Котлине

#android #android-studio #kotlin #togglebutton

Вопрос:

Всякий раз, когда я открываю приложение и нажимаю переключатель, включается темный режим, и он остается в том же положении. Однако, если я перезапущу приложение, переключатель вернется к значению по умолчанию, а темный режим все еще включен. Как бы я сделал это в Котлине?

Кроме того, есть ли какой-либо справочный код для этого в Котлине?

Комментарии:

1. Я бы рекомендовал взглянуть на то, как сохранять данные в Android, там много документации.

2. Вы можете использовать SharedPreferences для сохранения состояния переключателя. Всякий раз, когда приложение запускается, извлекайте состояние из общих настроек, чтобы проверить, включено ли оно или выключено. Подробнее читайте здесь developer.android.com/training/data-storage/shared-preferences

Ответ №1:

Создайте класс Pref для хранения данных.

 class Prefs (private val context: Context)

private fun getSharedPreferences(prefsName: String) =
    context.getSharedPreferences(prefsName, Context.MODE_PRIVATE)

private val PREF_KEY = "pref_key"
private val KEY_VALUE = "key_value"
private val prefValue by lazy { getSharedPreferences(PREF_KEY) }

var currentModeDayNight: Boolean
    get() {
        return prefValue.getBoolean(KEY_VALUE, false)
    }
    set(value) {
        prefValue.edit().putBoolean(KEY_VALUE, value).apply()
    }
 

Затем сохраните данные для режима дневной ночи по умолчанию.

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

 public static void setNightMode(Context target){

    UiModeManager uiManager = (UiModeManager) target.getSystemService(Context.UI_MODE_SERVICE);

    if (VERSION.SDK_INT <= 22) {
        uiManager.enableCarMode(0);
    }
    
    val pref = Pref(context)
    if (pref.currentModeDayNight) {
        pref.currentModeDayNight = false
        uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
    } else {
        pref.currentModeDayNight = true
        uiManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
    }
}