首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android首选项:当用户没有使用首选项屏幕时,如何加载默认值?

Android首选项:当用户没有使用首选项屏幕时,如何加载默认值?
EN

Stack Overflow用户
提问于 2010-04-22 22:40:14
回答 5查看 99.1K关注 0票数 127

我使用PreferenceActivity让用户设置一些值。我将xml文件与定义好的首选项一起提供给它。

我已经为他们设置了所有的android:defaultValue=""

当我启动我的应用程序时,我需要首选项,或者如果它们还没有手动设置,我需要缺省值:

代码语言:javascript
复制
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false); 

但是,当使用android:defaultValue="true"时,我仍然会得到false。因此,看起来XML中设置的defaultValues不是在任何地方使用,而是在初始化preferences-screen时使用。

我不想在getBoolean()方法中硬编码默认值。那么,有没有一种方法可以只在一个地方定义这些默认值呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-21 05:00:24

这个问题和我的类似:

initialize-preferences-from-xml-in-main-activity

只需在onCreate方法中使用以下代码:

代码语言:javascript
复制
PreferenceManager.setDefaultValues(this, R.xml.preference, false);

它将从XML中加载您的首选项,最后一个参数(readAgain)将保证用户的首选项不会被覆盖。这意味着将readAgain参数设置为false意味着只有在过去从未调用过此方法的情况下才会设置默认值,因此您不必担心每次创建活动时都会覆盖用户的设置

查看Android API中的PreferenceManager.setDefaultValues以进行进一步的研究。

票数 184
EN

Stack Overflow用户

发布于 2011-12-20 02:58:56

请注意,如果您正在使用

getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)

要检索首选项,您必须使用

PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)

设置默认值!

例如:

PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);

我希望这能帮助到一些人。

票数 27
EN

Stack Overflow用户

发布于 2014-09-01 16:57:08

在Pixel接受的答案中:

代码语言:javascript
复制
PreferenceManager.setDefaultValues(this, R.xml.preference, false);

根据声明,false意味着默认值不会被覆盖。这不是它所做的,它只是一个效率标志,用于在应用程序有多个入口点时停止解析。不幸的是,测试不是针对每个首选项文件进行的,因此如果您有多个首选项文件,则必须在除第一个文件之外的所有文件上编写true代码。

如果你担心效率,你可以像这样编写代码。

代码语言:javascript
复制
final static private int SPL = 1;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.getInt("spl", 0) != SPL)
{
    PreferenceManager.setDefaultValues(this, R.xml.prefs1, true);
    PreferenceManager.setDefaultValues(this, R.xml.prefs2, true);
    sp.edit().putInt("spl", SPL).apply();
}

如果您添加了更多的共享首选项,只需将SPL设置为一个较高的数字。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2691772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档