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

All*_*lan 10 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");
Run Code Online (Sandbox Code Playgroud)

在执行上述代码之后,每个变量都包含"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"/>           
Run Code Online (Sandbox Code Playgroud)

这是我的一些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>
Run Code Online (Sandbox Code Playgroud)

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

这只发生在我第一次在手机上安装我的应用程序时.在我进入设置屏幕一次然后立即退出之后,该应用程序很好并接受任何设置更改.

顺便说一下,正如您所看到的,"List1"是我的res/xml文件夹中名为settings.xml的文件中的android:key.

Com*_*are 22

安装后它们似乎没有设置为默认值 - 它们似乎为空.

这就是应该发生的事情.

我试图找出为什么我的默认首选项没有在安装后立即设置.

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


UPDATE

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


Arv*_*vis 10

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

PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain)
Run Code Online (Sandbox Code Playgroud)

PreferenceManager.setDefaultValues