如何使用Kotlin在Android中保存开关设置

时间:2019-02-14 22:57:12

标签: android kotlin sharedpreferences uiswitch

我需要使用Kotlin将开关的位置(实际上是6个开关)保存为Android用户偏好设置的一部分。

我已经用Java编写了代码,没有任何问题,但是该代码必须在Kotlin中。 我当时想像在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()

这是一个首选项页面,每个on / off开关打开或关闭特定的用户首选项。此外,开关状态需要保持不变以保留用户的设置。

1 个答案:

答案 0 :(得分:1)

您的交换机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()
    }
}