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);
这适用于所有默认首选项(SwitchPreference
、ListPreference
、Preference
),但遗憾的是不适用于这些自定义 SeekBarPreference
。
加载首选项活动也不会设置这些默认值。
这个问题有什么解决方法吗?否则,如果我要编辑库,我应该更改什么?
【问题讨论】:
【参考方案1】:我不使用方法PreferenceManager.getDefaultSharedPreferences(this, R.xml.preferences, true);
。相反,我在 Fragment 中使用 preference.setDefaultValue(object);
。
【讨论】:
以上是关于PreferenceManager.setDefaultValues 不适用于自定义首选项的主要内容,如果未能解决你的问题,请参考以下文章