Android:SharedPreference:启动时未设置默认值

时间:2010-05-01 21:00:27

标签: android android-preferences

我的应用中有Listpreferences。安装后它们似乎没有设置为默认值 - 它们似乎为空。我试图找出为什么我的默认首选项没有在安装后立即设置。在我的主要代码中,我有:

      SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

      InUnits = sp.getString("List1", "defValue");
       InAngs = sp.getString("List2", "defValue");
       OutUnits = sp.getString("List3", "defValue");
       OutAngs = sp.getString("List4", "defValue");

在执行上述代码之后,每个变量都包含“defValue”,而不是我在下面的ListPreference中指定的实际值。

我的首选项xml文件名为“settings.xml”。以下是其中一个ListPreferences:

       <ListPreference
       android:key="List1"
       android:title="Input: Alph"
       android:summary="Choose Alph or Ralph"
       android:entries="@array/inputAlph"
       android:entryValues="@array/input_Alph_codes"
       android:dialogTitle="Input Alph"
       android:defaultValue="ININ"/>           

以下是我的一些strings.xml文件的样子:

<string-array name="inputUnits">
    <item>Alph</item>
    <item>Ralph</item>  
    </string-array>   
    <string-array name="input_Alph_codes">
    <item>ININ</item>
    <item>INMM</item>
    </string-array>

当我进入菜单,然后进行设置时,我可以看到我的默认选项(radiobuttoned)。然后,当我从设置菜单返回主屏幕时 - 一切都很好 - 终身! ...然后为每个上面的var分配正确的默认值。

这只有在我第一次在手机上安装我的应用时才会发生。在我进入设置屏幕一次然后直接进入设置屏幕后,应用程序就可以了,并接受任何设置更改。

顺便提一下,正如您所看到的,“List1”是我的res / xml文件夹中名为settings.xml的文件中的android:键。

3 个答案:

答案 0 :(得分:22)

  

他们似乎没有设置   他们的默认值就在之后   安装 - 它们似乎是空的。

这就是应该发生的事情。

  

我想弄清楚为什么我的   默认首选项未设置   安装后即刻。

他们不应该。您在此处列出的首选项XML仅用于填充PreferenceActivity,仅此而已。在用户打开PreferenceActivity之前,首选项将为null,并且将返回您提供给SharedPreferences getter的默认值。


<强>更新

您可以使用setDefaultValues()上的PreferenceManager将偏好XML中的默认值分配给SharedPreferences。但是,要小心时间 - 这将执行磁盘I / O,因此理想情况下是在后台线程上执行。

答案 1 :(得分:10)

从您的首选项XML中将默认值设置为SharedPreferences。

PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain)

PreferenceManager.setDefaultValues

答案 2 :(得分:-2)

您可以指定默认值

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.getString("thePrefKey", "theDefaultValue");

“layout”settings.xml中的 android:defaultValue =“...”只是用户的视觉帮助