Android - 如何在代码中设置首选项

Posted

技术标签:

【中文标题】Android - 如何在代码中设置首选项【英文标题】:Android - How Do I Set A Preference In Code 【发布时间】:2010-10-07 19:32:45 【问题描述】:

我有一个 android 应用程序,其中我在一个 XML 文件中有我的偏好,它工作正常。我现在想使用代码设置其中一个首选项,而不是显示整个首选项屏幕,我该怎么做?

【问题讨论】:

【参考方案1】:

我假设您所指的首选项指的是应用程序的首选项,而不是 Android 手机设置。

要在您的应用程序运行之间存储首选项,您需要执行以下操作

    创建一个 SharedPreferences 对象

    SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);
    

    String n 标识您的偏好,第二个参数是它们将被访问的模式

    实例化一个编辑器对象

    SharedPreferences.Editor editor = settings.edit();
    

    注意:不要尝试 settings.editor.edit(),这不会产生持久对象,下面的代码也不起作用

    将您的偏好写入缓冲区

    editor.put...(String, value)
    

    put 函数有很多,putString、putBoolean 等,其中 String 是 key ("version", "good run"),value 是 value ("1.5.2", true) em>

    刷新缓冲区

    editor.commit();
    

    这实际上写入了您的偏好设置。如果您的应用程序在此行之前崩溃,则不会写入首选项。还有一个记录在案的错误:commit() 应该返回一个指示成功或失败的布尔值。上次我检查它总是返回 false。

这些首选项将存储在手机上,并且只有您的应用程序可以访问。

更多文档是here

【讨论】:

其实可以使用单行:prefs.edit().putInt(key, value).commit(); 任何想法这与 PreferenceActivity 有何不同,您是否可以参考 PreferenceActivity 的示例? 如果您不关心返回值,文档说从 API 级别 9 开始,您可以更好地调用 apply(); 而不是 commit(); 虽然我在这里晚了 5 年,但是当我想通过 java 而不是在 xml 文件中为我的偏好创建一个新的布尔值时,使用@tomash 建议的方法失败了。尽管在创建密钥后使用他的线路确实有效。谁能解释一下 Will answer 和 tomash 有什么区别?他们不是都做同样的事情吗? @OmarBizreh - tomash 所说的(一个班轮)与威尔回答的第 2-4 行完全相同。 (当然,您仍然需要创建一个首选项对象(第 1 行))。我不知道如果您在创建该首选项之前尝试第 1 行,然后稍后尝试使用该首选项会发生什么——您就是这样做的吗?如果是这样,那么解决方案是:无论您在代码中创建首选项(设置键)的任何位置,还要将您的类设置为全局以保存首选项。或者只是为了安全,每次都做第 1 行......【参考方案2】:

我试过了,但没有用:

SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);

试试这个:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);

【讨论】:

说什么出了问题,而不是说“没用”会更有用。 (它没有编译?当你运行它时它崩溃了?返回的首选项列表是空的?)不过,+1 一个好的提示:看看我的应用程序,你的行是用来从 MainActivity 访问设置的;可以选择使用原始答案的行来访问 PreferenceFragment(包含 XML 描述用于显示/更改首选项的小部件的片段)中的代码中的设置。【参考方案3】:

您可以使用以下代码在 sharedpreferences 中保存一些内容

public static void save(String valueKey, String value) 
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);
    SharedPreferences.Editor edit = prefs.edit();
    edit.putString(valueKey, value);
    edit.commit();
    

阅读偏好:

public static String read(String valueKey, String valueDefault) 
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);
   return prefs.getString(valueKey, valueDefault);

【讨论】:

以上是关于Android - 如何在代码中设置首选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在android的片段中设置应用程序上下文?

如何在Android中设置铃声+震动

如何在 Eclipse 中设置 Android NDK 环境

如何在选项卡式活动中设置片段从右到左开始

如何在Java代码中设置TCP_CORK选项

Android偏好总结。如何在摘要中设置 3 行?