如何检查 SwitchPreference 的当前状态?
How do I check the current state of a SwitchPreference?
我的 SettingsFragment.kt
中有一个 SwitchPreference
,它会根据打开或关闭来更改图标和标题。
这是对应的代码:
notificationsPreference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val switched = newValue as? Boolean ?: false
if (switched) {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_active)
notificationsPreference.title = "Receive Notifications"
} else {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_off)
notificationsPreference.title = "Mute Notifications"
}
true
}
此代码有效,但是,假设用户单击 SwitchPreference
关闭,离开 SettingsFragment
并返回。它会显示 SwitchPreference
关闭,但标题和图标将不正确。正确的图标和标题将是我在上面的 else
语句中的代码。
如何在用户输入 SettingsFragment
之前检查 SwitchPreference
的当前状态。我想检查一下,如果 SwitchPreference
关闭,我可以通过编程设置正确的图标和标题。
SwitchPreference
使用布尔 key/value 对维护 SharedPreference
中的当前值。
因此,只要 PreferenceFragment
使用其生命周期方法之一(例如 onCreatePreferences()
显示,您就可以执行此操作
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
setPreferencesFromResource(
R.xml.settings, // Your setting.xml file
rootKey
)
val preference = findPreference(
getString(R.string.my_preference_key) // Change this to the preference key set in the settings XML file
val sharedPrefs =
PreferenceManager.getDefaultSharedPreferences(this@SettingsFragment.requireContext())
// Get the preference value
val isOn: Boolean = sharedPrefs.getBoolean(
preference.getKey(),
false // default value
)
if (isOn) {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_active)
notificationsPreference.title = "Receive Notifications"
} else {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_off)
notificationsPreference.title = "Mute Notifications"
}
}
确保将 R.xml.settings
更改为您的设置文件名,并将 R.string.my_preference_key
更改为首选项键。
我的 SettingsFragment.kt
中有一个 SwitchPreference
,它会根据打开或关闭来更改图标和标题。
这是对应的代码:
notificationsPreference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val switched = newValue as? Boolean ?: false
if (switched) {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_active)
notificationsPreference.title = "Receive Notifications"
} else {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_off)
notificationsPreference.title = "Mute Notifications"
}
true
}
此代码有效,但是,假设用户单击 SwitchPreference
关闭,离开 SettingsFragment
并返回。它会显示 SwitchPreference
关闭,但标题和图标将不正确。正确的图标和标题将是我在上面的 else
语句中的代码。
如何在用户输入 SettingsFragment
之前检查 SwitchPreference
的当前状态。我想检查一下,如果 SwitchPreference
关闭,我可以通过编程设置正确的图标和标题。
SwitchPreference
使用布尔 key/value 对维护 SharedPreference
中的当前值。
因此,只要 PreferenceFragment
使用其生命周期方法之一(例如 onCreatePreferences()
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
setPreferencesFromResource(
R.xml.settings, // Your setting.xml file
rootKey
)
val preference = findPreference(
getString(R.string.my_preference_key) // Change this to the preference key set in the settings XML file
val sharedPrefs =
PreferenceManager.getDefaultSharedPreferences(this@SettingsFragment.requireContext())
// Get the preference value
val isOn: Boolean = sharedPrefs.getBoolean(
preference.getKey(),
false // default value
)
if (isOn) {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_active)
notificationsPreference.title = "Receive Notifications"
} else {
notificationsPreference.icon = ContextCompat.getDrawable(this@SettingsFragment.requireContext(), R.drawable.ic_notifications_off)
notificationsPreference.title = "Mute Notifications"
}
}
确保将 R.xml.settings
更改为您的设置文件名,并将 R.string.my_preference_key
更改为首选项键。