如何检查 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 更改为首选项键。