我的应用程序中有列表首选项。它们似乎没有在安装后立即设置为默认值 - 它们似乎为空。我试图找出为什么安装后没有立即设置我的默认首选项。在我的主要代码中我有:
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>
当我进入菜单,然后进入设置时,我可以看到我的默认值已选中(单选按钮)。然后,当我从设置菜单返回主屏幕时 - 一切都很好 - 终生! ...然后上面的每个变量都被分配了正确的默认值。
只有当我第一次在手机上安装应用程序时才会发生这种情况。当我进入设置屏幕一次然后直接退出后,该应用程序就很好并且接受任何设置更改。
顺便说一句,正如您所看到的,“List1”是我的 res/xml 文件夹中名为 settings.xml 的文件中的 android:key。
他们似乎没有设置 他们的默认值之后 安装 - 它们似乎为空。
这就是应该发生的事情。
我试图找出为什么我的 未设置默认首选项 安装后。
他们不应该这样。您在那里列出的首选项 XML 仅用于填充
PreferenceActivity
,仅此而已。在用户打开 PreferenceActivity
之前,首选项将为空,并且将返回您提供给 SharedPreferences
getter 的默认值。
更新
您可以使用
setDefaultValues()
上的 PreferenceManager
将首选项 XML 中的默认值分配给 SharedPreferences
。但是,请注意时间安排——这将执行磁盘 I/O,因此最好在后台线程上执行。
从您的首选项 XML 将默认值设置为 SharedPreferences。
PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain)
应该检查
PreferenceManager.KEY_HAS_SET_DEFAULT_VALUES
:
/** Apply default values, as defined in XML. */
private void setDefaultValues(@XmlRes int resId) {
String name = PreferenceManager.KEY_HAS_SET_DEFAULT_VALUES;
if (! getSharedPreferences(name, Context.MODE_PRIVATE).getBoolean(name, false)) {
PreferenceManager.setDefaultValues(this, resId, true);
Log.d(LOG_TAG, "default values have been set");
}
}
您可以像这样指定默认值
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.getString("thePrefKey", "theDefaultValue");
“布局”settings.xml 中的 android:defaultValue="..." 只是对用户的视觉帮助