我的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关闭,我可以通过编程设置正确的图标和标题。
发布于 2021-08-21 17:30:57
SwitchPreference使用布尔键/值对维护SharedPreference中的当前值。
因此,无论何时使用onCreatePreferences()等生命周期方法显示PreferenceFragment,都可以做到这一点
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更改为首选项键。
https://stackoverflow.com/questions/68875154
复制相似问题