安卓 - 如何在代码中设置偏好设置

44

我有一个Android应用程序,在其中有一个XML文件来存储我的偏好设置,目前它可以正常工作。现在,我想使用代码来设置其中一个偏好项,而不是显示整个偏好设置屏幕,我该如何实现?

3个回答

123
我假设你所说的"preferences"是指你的应用程序偏好设置,而不是 Android 手机设置。

要在应用程序运行期间保存偏好设置,你需要执行以下操作:

  1. 创建一个 SharedPreferences 对象

SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);

字符串n用于标识您的偏好,第二个参数是它们将要被访问的模式

  • 实例化一个Editor对象

    SharedPreferences.Editor editor = settings.edit();
    

    注意:不要尝试使用settings.editor.edit(),这不会创建一个持久对象,下面的代码将无法工作。

  • 将您的偏好写入缓冲区

  • editor.put...(String, value)
    

    有许多put函数,如putString、putBoolean等。字符串是键(“version”、“good run”),值是值(“1.5.2”、true)

  • 刷新缓冲区

  • editor.commit();
    

    如果你的应用程序在这行代码之前崩溃,那么实际上你写入了偏好设置但未能成功保存。还有一个已记录的错误:commit()应该返回一个指示成功或失败的布尔值。据我所知,它总是返回false。

    这些偏好设置将存储在手机上,并且只能被您的应用程序访问。

    更多文档请参见此处


    45
    您可以使用一行代码进行操作:prefs.edit().putInt(key, value).commit(); - tomash
    2
    你有什么想法,这与PreferenceActivity有何不同,并且你可能有PreferenceActivity示例的参考资料吗? - Eugene van der Merwe
    2
    如果您不关心返回值,文档称自API 9以来,最好调用apply();而不是commit(); - Twinone
    @OmarBizreh - Tomash所说的(一行代码)与Will答案的第2-4行完全相同。(当然,您仍需要创建一个首选项对象(第1行)。)我不知道如果您在创建该首选项之前尝试第1行会发生什么情况,然后尝试稍后使用该首选项对象 - 这是您做的吗?如果是这样,那么解决方案是:无论在代码中的哪个位置创建首选项(设置键),也要设置包含首选项对象的类全局变量。或者每次都执行第1行以确保安全... - ToolmakerSteve
    @EugenevanderMerwe - PreferenceActivity或PreferenceFragment用于向用户显示所有首选项(或一组首选项),以便用户可以修改它们。 OP明确要求如何通过代码设置一个或多个首选项,而不需要打开GUI。因此,区别在于程序员设置首选项,而不是用户设置首选项。 - ToolmakerSteve
    显示剩余2条评论

    8
    我尝试了这个方法,但是没有成功:
    SharedPreferences settings = getSharedPreferences(String n, MODE_PRIVATE);
    

    请尝试使用以下方法:
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    

    说出具体的问题会更有用,而不是只说“没用”。(它没有编译?运行时崩溃了吗?返回的偏好列表为空了吗?)尽管如此,这是一个好建议:看看我的应用程序,你的代码行是从MainActivity访问设置的方法;原始答案的代码行可以选择在PreferenceFragment中的代码中访问设置(一个包含XML描述小部件以显示/更改首选项的片段)。 - ToolmakerSteve

    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);
    }
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接