3

當應用程序是第一個startet時,我想通過使用'android:defaultValue'屬性來存儲我在prefences.xml中定義的所有默認值,但其中一些不存儲在設備上 - 是否有人告訴我爲什麼?默認值來自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>  

回答

1

我找到了解決我的問題,但它仍然不能回答我的問題。 我不得不改變線路:

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

到:

PreferenceManager.setDefaultValues(this, R.xml.preferences, true); 

由於文檔說,設置readAgain不要覆蓋任何現有設備優先值:

「注意:這將NOT reset preferences 回到它們的默認值。「

只需用「真」爲我工作,但我仍然不知道爲什麼只有三個我的喜好的設置默認使用「假」時,即使含有KEY_HAS_SET_DEFAULT_VALUES xml文件不存在(所以沒有設置爲true)在設備上(直到我調用上述方法時才存在)。

如果有人知道這種行爲的可能原因,請讓我知道!

+0

有人可能更新了文檔,因爲setDefaultValues(...)docs, 「注意:這不會將首選項重置爲其默認值。」可以找到以下「對於該功能,使用PreferenceManager.getDefaultSharedPreferences(Context)並清除它,然後調用此方法,並將此參數設置爲true 「。 – Kresimir 2015-08-23 22:55:55

4

你必須明確地套用預設值。讓我們假設你有preferences.xml文件,那麼你必須調用:

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

您可以從您的主要活動或(更好的方法)從Application類(在onCreate方法)做到這一點。有關後一種方法的詳細信息在AndroidManifest.xml

注意看到Application documationandroid:name attribute documentationapplication標籤:從preference.xml默認值也將當用戶打開PreferenceActivity首次應用。因爲這個PreferenceActivity必須使用preference.xml填充首選項。

+0

嗨,謝謝你的回答!不幸的是,似乎沒有工作。 :-(我做了一次完整的卸載,將行放入我的應用程序入口活動中,並在重新啓動後查看sharedprefs文件。我仍然可以在preferences.xml中找到每個ListPreference的默認值,但是文件中沒有默認的CheckBoxPreference和TimePreference。你知道爲什麼嗎? – cody 2011-05-31 00:13:26

+0

您應該在問題中添加您的'preferences.xml'。如果太長,請嘗試將其降至4-5偏好。 – inazaruk 2011-05-31 05:51:28

+0

我附上了代碼,我認爲這並不令人興奮。但它似乎沒有工作:( – cody 2011-05-31 17:46:01

0

我有完全相同的問題與簡單的整數默認值。即使在首選項活動打開後,setDefaultValues()中的true或false也可以使用它們的默認值填充一些新的首選項。我最近將這些添加到了xml文件中。他們只在editor.Edit()過程之後纔開始工作。順便說一下,我正在爲2.1構建。

5

根據您的com.myapp.TimePreference的超類是什麼,您可能必須自己在onSetInitialValue()中保留默認值。 EditTextPreference已經實現了這一點,但DialogPrefercence或Preference只有一個空的實現。

protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 
    persistString(restoreValue ? 
     getPersistedString((String)defaultValue) : (String)defaultValue)); 
}