如何检查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
相关产品推荐
相关产品推荐

