PreferenceManager.setDefaultValues 不适用于自定义首选项

Posted

技术标签:

【中文标题】PreferenceManager.setDefaultValues 不适用于自定义首选项【英文标题】:PreferenceManager.setDefaultValues does not work for custom Preferences 【发布时间】:2019-07-22 03:40:27 【问题描述】:

我正在开发一个小应用程序,它有很多可修改的偏好,其中大部分是SeekBarPreferences

碰巧,由于我对 android 默认的 SeekBarPreferences 很不满意,我正在使用非常好的 MaterialSeekBarPreference 库,很遗憾它已经有 2 年没有更新了。

这是这个库使用的代码示例:

<com.pavelsikun.seekbarpreference.SeekBarPreference
    android:key="@string/param_maxEvent"
    android:title="Blahlblahblahblahblah"
    android:summary="Blahlblahblahblahblah too"
    android:defaultValue="2"
    custom:msbp_minValue="0"
    custom:msbp_maxValue="5"
    custom:msbp_measurementUnit="events"
    custom:msbp_interval="1"
    custom:msbp_dialogEnabled="false"/>

如您所见,您可以使用android:defaultValue xml 属性,它与UI 完美配合。

由于我需要在应用初始化时加载所有这些默认值,我使用PreferenceManager.setDefaultValues 方法:

public class App extends Application 
    @Override public void onCreate() 
        super.onCreate();
        PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
    

这适用于所有默认首选项(SwitchPreferenceListPreferencePreference),但遗憾的是不适用于这些自定义 SeekBarPreference

加载首选项活动也不会设置这些默认值。

这个问题有什么解决方法吗?否则,如果我要编辑库,我应该更改什么?

【问题讨论】:

【参考方案1】:

我不使用方法PreferenceManager.getDefaultSharedPreferences(this, R.xml.preferences, true);。相反,我在 Fragment 中使用 preference.setDefaultValue(object);

【讨论】:

以上是关于PreferenceManager.setDefaultValues 不适用于自定义首选项的主要内容,如果未能解决你的问题,请参考以下文章