You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查SwitchPreference当前状态并监听开关切换事件

解决方案

你只需要为SwitchPreferenceCompat设置偏好变更监听器即可,修改你的SettingsFragment代码如下:

class SettingsFragment : PreferenceFragmentCompat() {

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey)
        
        // 根据XML中定义的key找到对应开关组件
        val vibrateSwitch = findPreference<SwitchPreferenceCompat>("vibrate")
        // 设置状态变更监听
        vibrateSwitch?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
            if (newValue as Boolean) {
                Toast.makeText(requireContext(), "switch preference is enabled", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(requireContext(), "switch preference is disabled", Toast.LENGTH_SHORT).show()
            }
            // 必须返回true,新的开关状态才会被持久化保存
            return@OnPreferenceChangeListener true
        }
    }
}

注意事项

  • 确认导入的是AndroidX官方Preference包,相关导入声明参考:
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import android.widget.Toast
  • 绝大多数同类方案不生效的核心原因是onPreferenceChangeListener回调返回了false,返回false时系统不会保存新的开关状态,点击后开关会自动回弹到之前的状态。

内容的提问来源于stack exchange,提问作者AmirHossein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:06:03