如何使用 Kotlin 在 Android 中保存开关设置
How to save switch setting in Android using Kotlin
我需要使用 Kotlin 在 Android 中保存一个开关的位置(实际上是 6 个开关)作为用户偏好的一部分。
我已经在 Java 中编写了没有问题的代码,但是这段代码需要使用 Kotlin。
我正在考虑使用 Java 中的共享首选项,并成功生成了代码来保存一个开关的状态。但是,当我编写代码添加第二个开关时,第一个开关控制其他开关,并且它们的状态保存为与第一个相同。此外,所有后续开关都将重现相同的内容。
我已经尝试了 Kotlin.org 代码 converter/translator,但是这会产生一堆废话,我必须在编译之前清理这些废话,然后发现翻译后的代码可能不完整。
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 开关都会打开或关闭特定的用户首选项。此外,开关状态需要保持以保持用户的设置。
您的开关 push_switch1 和 email_switch1 都使用相同的 Preference KEY,即 PREF_SWITCH。
您需要为每个开关添加唯一的 Preference KEY。
添加 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()
}
}
我需要使用 Kotlin 在 Android 中保存一个开关的位置(实际上是 6 个开关)作为用户偏好的一部分。
我已经在 Java 中编写了没有问题的代码,但是这段代码需要使用 Kotlin。 我正在考虑使用 Java 中的共享首选项,并成功生成了代码来保存一个开关的状态。但是,当我编写代码添加第二个开关时,第一个开关控制其他开关,并且它们的状态保存为与第一个相同。此外,所有后续开关都将重现相同的内容。 我已经尝试了 Kotlin.org 代码 converter/translator,但是这会产生一堆废话,我必须在编译之前清理这些废话,然后发现翻译后的代码可能不完整。
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 开关都会打开或关闭特定的用户首选项。此外,开关状态需要保持以保持用户的设置。
您的开关 push_switch1 和 email_switch1 都使用相同的 Preference KEY,即 PREF_SWITCH。
您需要为每个开关添加唯一的 Preference KEY。 添加 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()
}
}