当应用程序第一次启动时,我想通过使用'android:defaultValue'属性存储我在prefences.xml中定义的所有默认值,但是其中一些不存储在设备上 - 可以有人告诉我为什么?
<?xml version="1.0" encoding="utf-8"?>
<PreferenceCategory android:title="@string/prefs_cat_title_x">
<ListPreference
android:key="@string/prefs_key_1"
android:title="@string/prefs_title_1"
android:summary="@string/prefs_summary_1"
android:entries="@array/array1"
android:entryValues="@array/array1"
android:defaultValue="@string/prefs_default_1"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_2"
android:title="@string/prefs_title_2"
android:defaultValue="@string/prefs_default_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_3"
android:title="@string/prefs_title_3"
android:defaultValue="@string/prefs_default_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ListPreference
android:key="@string/prefs_key_4"
android:title="@string/prefs_title_4"
android:summary="@string/prefs_summary_4"
android:entries="@array/array2"
android:entryValues="@array/array2"
android:defaultValue="@string/prefs_default_4"/>
<CheckBoxPreference
android:key="@string/prefs_key_5"
android:title="@string/prefs_title_5"
android:summary="@string/prefs_summary_5"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="@string/prefs_key_6"
android:title="@string/prefs_title_6"
android:summary="@string/prefs_summary_6"
android:defaultValue="false"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_cat_title_common">
<com.myapp.DatabaseResetPreference
android:title="@string/prefs_title_7"
android:summary="@string/prefs_summary_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</PreferenceCategory>
答案 0 :(得分:5)
根据com.myapp.TimePreference的超类,您可能必须自己在onSetInitialValue()中保留默认值。 EditTextPreference实现了这一点,但DialogPrefercence或Preference只有一个空实现。
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
persistString(restoreValue ?
getPersistedString((String)defaultValue) : (String)defaultValue));
}
答案 1 :(得分:4)
您必须明确应用默认值。假设您有preferences.xml
个文件,那么您必须致电:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
您可以从Application
类(onCreate
方法)中的主要活动或(更好的方法)执行此操作。有关以后方法的详细信息,请参阅application
AndroidManifest.xml
标记中的Application
documation和android:name
attribute documentation
注意:当用户第一次打开preference.xml
时,也会应用PreferenceActivity
的默认值。这是因为PreferenceActivity
必须使用preference.xml
填充首选项。
答案 2 :(得分:1)
我找到了解决问题的方法,但它仍然没有回答我的问题。 我不得不换行:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
成:
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
正如文档所说,设置readAgain不应覆盖任何现有的偏好值:
“注意:这不会重置首选项 回到默认值。“
简单地使用“true”对我有用,但我仍然不知道为什么在使用“false”时只设置了我的三个首选项的默认值,即使包含KEY_HAS_SET_DEFAULT_VALUES的xml文件不存在(等等)在设备上没有设置为true(直到我调用上面的方法才存在)。
如果有人知道这种行为可能的原因,请告诉我!
答案 3 :(得分:0)
我对简单整数默认值有完全相同的问题。即使在打开首选项活动之后,setDefaultValues()中也可以填充一些新的首选项及其默认值。我最近已将这些添加到xml文件中。它们只在editor.Edit()程序之后才开始工作。顺便说一下,我正在建造2.1。