偏好设置

简介: 设置可接受的范围要将可接受的值限制在 0(不包括)和 3(包括)之间,我们选择使用 PreferenceChangeListener - 它与 SharedPreferenceChangeListener 的不同之处为:• SharedPreferenceChangeListener 在任何值保存到 SharedPreferences 文件后被触发。• PreferenceChangeListener 在值保存到 SharedPreferences 文件前被触发。因此,可以防止对偏好设置做出无效的更新。PreferenceChangeListeners 也附加到了单个偏好设置上。

设置可接受的范围


要将可接受的值限制在 0(不包括)和 3(包括)之间,我们选择使用


PreferenceChangeListener - 它与 SharedPreferenceChangeListener 的不同之处为:


  • SharedPreferenceChangeListener 在任何值保存到 SharedPreferences 文件后被触发。


  • PreferenceChangeListener 在值保存到 SharedPreferences 文件前被触发。因此,可以防止对偏好设置做出无效的更新。PreferenceChangeListeners 也附加到了单个偏好设置上。


流程通常如下所示:


  1. 用户更新偏好设置。


  1. 该偏好设置触发了 PreferenceChangeListener。


  1. 新的值保存到了 SharedPreference 文件。


  1. onSharedPreferenceChanged 监听器被触发。


除此之外,它们的行为很相似。你将在你的 Activity中实现Preference.OnPreferenceChangeListener,覆盖onPreferenceChange(Preference preference, Object newValue)。 onPreferenceChange 方法将返回 true 或 false,取决于偏好设置实际上是否要被保存。


若要妥善管理 Activity 生命周期,我们建议您在 onResume()onPause() 回调期间分别注册和注销SharedPreferences.OnSharedPreferenceChangeListener


偏好设置的回调通用代码:

// Override onSharedPreferenceChanged to update non CheckBoxPreferences when they are changed
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Preference preference = findPreference(key);
        if (null != preference) {
            if (!(preference instanceof CheckBoxPreference)) {
                setPreferenceSummary(preference, sharedPreferences.getString(key, ""));
            }
        }
    }
 // Create a method called setPreferenceSummary that accepts a Preference and an Object and sets the summary of the preference
    private void setPreferenceSummary(Preference preference, Object value) {
        String stringValue = value.toString();
        String key = preference.getKey();
        if (preference instanceof ListPreference) {
            /* For list preferences, look up the correct display value in */
            /* the preference's 'entries' list (since they have separate labels/values). */
            ListPreference listPreference = (ListPreference) preference;
            int prefIndex = listPreference.findIndexOfValue(stringValue);
            if (prefIndex >= 0) {
                preference.setSummary(listPreference.getEntries()[prefIndex]);
            }
        } else {
            // For other preferences, set the summary to the value's simple string representation.
            preference.setSummary(stringValue);
        }
    }



目录
相关文章
|
7月前
FlashFXP快捷键
FlashFXP快捷键
windows10为何鼠标右键失灵,桌面右键一直转圈的解决
windows10为何鼠标右键失灵,桌面右键一直转圈的解决
1104 0
|
iOS开发 MacOS
macOS:如何显示隐藏的文件?
如何显示 U 盘或者硬盘里面的隐藏文件?
167 0
|
Windows
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(下)
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(下)
326 0
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(下)
|
Windows
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(上)
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(上)
723 0
Win系统 - 全屏看视频时任务栏没有自动隐藏怎么办?(上)
Win系统 - Win10 电脑桌面的 WiFi 图标不见了怎么办?
Win系统 - Win10 电脑桌面的 WiFi 图标不见了怎么办?
881 0
Win系统 - Win10 电脑桌面的 WiFi 图标不见了怎么办?