首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查SwitchPreference的当前状态?

如何检查SwitchPreference的当前状态?
EN

Stack Overflow用户
提问于 2021-08-21 17:08:59
回答 1查看 45关注 0票数 2

我的SettingsFragment.kt中有一个SwitchPreference,可以根据它是打开还是关闭来更改图标和标题。

这是它的代码:

代码语言:javascript
复制
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关闭,我可以通过编程设置正确的图标和标题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-21 17:30:57

SwitchPreference使用布尔键/值对维护SharedPreference中的当前值。

因此,无论何时使用onCreatePreferences()等生命周期方法显示PreferenceFragment,都可以做到这一点

代码语言:javascript
复制
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更改为首选项键。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68875154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档