Как сохранить настройки переключателя в Android с помощью Kotlin - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно сохранить положение переключателя (фактически 6 переключателей) как часть пользовательских настроек в Android с помощью Kotlin.

Я написал код на Java без проблем, но этот код требуетбыть в Котлине.Я думал об использовании общих настроек, как в Java, и успешно создал код для сохранения состояния одного коммутатора.Однако, когда я пишу код для добавления второго переключателя, первый переключатель получает контроль над дополнительными переключателями, и их состояние сохраняется так же, как и у первого.Кроме того, все последующие переключатели будут воспроизводиться одинаково.Я пробовал конвертер / переводчик кода Kotlin.org, но он производит кучу jabber, которые мне нужно очистить, прежде чем я смогу скомпилировать, а затем выяснить, что переведенный код, вероятно, неполон.

    private fun onSwitch() {

    val sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE)
    val editor = sharedPreferences.edit()


    push_switch1.isChecked = sharedPreferences.getBoolean(PREF_SWITCH, false)
    push_switch1.setOnCheckedChangeListener { _, isChecked ->
        if (isChecked){
            editor.putBoolean(PREF_SWITCH, push_switch1.isChecked)
            editor.putBoolean(PREF_SWITCH, true)
            Toast.makeText(this@MainActivity, "Push Notification ON", Toast.LENGTH_SHORT).show()
        } else {
            editor.putBoolean(PREF_SWITCH, false)
            Toast.makeText(this@MainActivity, "Push Notification Off", Toast.LENGTH_SHORT).show()
        }
        //editor.apply()
    }
    email_switch1.isChecked = sharedPreferences.getBoolean(PREF_SWITCH, false)
    email_switch1.setOnCheckedChangeListener { _, isChecked ->
        if (isChecked){
            editor.putBoolean(PREF_SWITCH, email_switch1.isChecked)
            editor.putBoolean(PREF_SWITCH, true)
            Toast.makeText(this@MainActivity, "Email Notification ON", Toast.LENGTH_SHORT).show()
        }else{
            editor.putBoolean(PREF_SWITCH, false)
            Toast.makeText(this@MainActivity, "Email Notification OFF", Toast.LENGTH_SHORT).show()
        }
        //editor.apply()
    }
    editor.apply()

Это страница настроек, и каждый переключатель вкл / выкл включает или выключает определенную настройку пользователя.Кроме того, состояние коммутатора должно сохраняться для сохранения настроек пользователя.

1 Ответ

0 голосов
/ 15 февраля 2019

Оба ваших переключателя push_switch1 и email_switch1 используют один и тот же ключ предпочтения PREF_SWITCH.

Вам необходимо добавить уникальный ключ предпочтения для каждого переключателя.Добавьте настройки PREF_SWITCH_PUSH и PREF_SWITCH_EMAIL.Тогда попробуйте это ...

private fun onSwitch() {

    val sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE)
    val editor = sharedPreferences.edit()


    push_switch1.isChecked = sharedPreferences.getBoolean(PREF_SWITCH_PUSH, false)
    push_switch1.setOnCheckedChangeListener { _, isChecked ->
        if (isChecked){
            editor.putBoolean(PREF_SWITCH_PUSH, true)
            Toast.makeText(this@MainActivity, "Push Notification ON", Toast.LENGTH_SHORT).show()
        } else {
            editor.putBoolean(PREF_SWITCH_PUSH, false)
            Toast.makeText(this@MainActivity, "Push Notification Off", Toast.LENGTH_SHORT).show()
        }
        editor.apply()
    }
    email_switch1.isChecked = sharedPreferences.getBoolean(PREF_SWITCH_EMAIL, false)
    email_switch1.setOnCheckedChangeListener { _, isChecked ->
        if (isChecked){
            editor.putBoolean(PREF_SWITCH_EMAIL, true)
            Toast.makeText(this@MainActivity, "Email Notification ON", Toast.LENGTH_SHORT).show()
        }else{
            editor.putBoolean(PREF_SWITCH_EMAIL, false)
            Toast.makeText(this@MainActivity, "Email Notification OFF", Toast.LENGTH_SHORT).show()
        }
        editor.apply()
    }
}
...