【问题标题】:Initialize preferences from XML in the main Activity [duplicate]在主活动中从 XML 初始化首选项 [重复]
【发布时间】:2010-05-20 13:45:26
【问题描述】:

我的问题是,当我启动应用程序时,用户没有打开我的PreferenceActivity,所以当我检索它们时,我的preference.xml 文件中没有定义任何默认值。

preference.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="applicationPreference" android:title="@string/config"
    >
    <ListPreference
            android:key="pref1"
            android:defaultValue="default"
            android:title="Title"
            android:summary="Summary"
            android:entries="@array/entry_names"
            android:entryValues="@array/entry_values"
            android:dialogTitle="@string/dialog_title"
    />                  
</PreferenceScreen>

来自我的主要活动的片段(onCreate 方法):

    SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);        
    String pref1 = appPreferences.getString("pref1", null);

结果我得到一个null 值。

【问题讨论】:

    标签: android xml android-preferences


    【解决方案1】:

    在您的主要ActivityonCreate() 中,只需调用the PreferenceManager.setDefaultValues() method

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

    这将读取您的preference.xml 文件并设置其中定义的默认值。将readAgain 参数设置为false 意味着这只会在过去从未调用过此方法的情况下设置默认值,因此您不必担心每次创建Activity 时都会覆盖用户的设置。

    【讨论】:

    • 但是谁有这个 perference.xml 的示例或模板供参考?
    • 你拯救了我的一天!一直在寻找 3 小时的空值,晚上 3 点在机场使用网络共享 wifi。谢谢!
    • @Dave Webb 这不适用于字符串首选项。
    • readAgain 设置为true 与覆盖用户设置无关。来自 Javadoc:注意:这不会将首选项重置为其默认值。
    • 在更新中添加新设置时如何工作?它们不会被初始化,对吗?
    【解决方案2】:

    我会很简短。 :)

    strings.xml(实际上我有 prefs.xml 专门用于偏好):

    <string name="pref_mypref_key">mypref</string>
    <string name="pref_mypref_default">blah</string>
    

    preferences.xml

    android:key="@string/pref_mypref_key"
    android:defaultValue="@string/pref_mypref_default"
    

    MyActivity.java

    String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
    

    【讨论】:

    • 谢谢,这实际上是我另一个关于在哪里存储首选项键的问题的答案 :) 如果我能够将它与这个问题的最佳答案结合起来,那就太好了!
    • 显然,在这个例子中,这行会出现在MyActivity.java之前myprefVal的赋值:SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    • 这行得通,但这真的有必要吗?
    【解决方案3】:

    您对getString() 的调用将null 作为第二个参数。将其更改为您想要的默认值。

    【讨论】:

    • 这是一个非常优雅的解决方案。 +1。但是,为了实现 OP 想要的,PreferenceManager.setDefaultValues() 是解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2018-11-07
    • 2020-11-01
    相关资源
    最近更新 更多