2011-09-28 43 views
6

我有一個像this類似的問題,所以我根據提出的解決方案進行,並加入這行代碼的onCreate:Android的首選項:不正確的默認值,儘管「setDefaultValues」

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

不幸的是,問題仍然發生時,如果用戶還沒有從

mPreferences.getBoolean(String.valueOf(day_of_week), true)

改變了設置,仍然是默認值(真)代替所使用的DEF的XML的價值。

一個建議getBoolean()的默認值的參數更改爲空,但是這個代碼崩潰的應用程序:

mPreferences.getBoolean(String.valueOf(day_of_week), (Boolean) null) 

有什麼建議?提前致謝!

+0

你在'settings.xml'中設置了'android:defaultValue =「default」'嗎?這行應該添加到你的主要活動onCreate中,而不是你的設置。 – Knickedi

+0

不,我將android:defaultValue設置爲「true」或「false」。 setDefaultValues()函數位於我的主Activity的onCreate中,而不是在設置 – JonEasy

+0

@JhonnyR,我只是浪費了幾個小時跟蹤它。我同意這是一個錯誤。人們應該修改這篇文章,以便在未來拯救像我這樣的人。 – Brandyn

回答

5

最後它的工作原理!我真的花了很多時間和精力去尋找錯誤,只要我在這裏發佈,我一個人發現了它,謝謝你們幫助我。

如果說anyoneelse有這個問題,解決方法是這樣的:從真正的變化getBoolean()默認值設置爲false,像這樣:

mPreferences.getBoolean(String.valueOf(day_of_week), true) - >不起作用,它始終是真實的,不管發生了什麼在XML中

mPreferences.getBoolean(String.valueOf(day_of_week), false) - >它的工作原理!這是XML的正確默認值我真的不明白這樣做的邏輯,但現在它完美地工作。看起來有點像我的錯誤。

+0

在未來,請務必留下答案爲*答案*不修改的問題,請(我搬到這個適合你,你可以上Q的詳細信息,查看編輯歷史) –

3

setDefaultValues的第三個參數設置爲true。所以, PreferenceManager.setDefaultValues(this, R.xml.settings, true);

documentation

public static void setDefaultValues (Context context, int resId, boolean readAgain)
如果readAgain是假的,這隻會設置的默認值,如果這個方法從未在過去叫(或KEY_HAS_SET_DEFAULT_VALUES默認值共享首選項文件爲false)。要嘗試繞過此檢查再次設置默認值,請將readAgain設置爲true。
注意:這不會將首選項重置爲默認值。

所以,我的理解是:

  • 如果readAgainfalse,它只會一次 應用程序第一次運行後讀取默認值。如果您向首選項添加了默認值爲 的新媒體資源,則在您卸載之前它不會被初始化,並且 會再次安裝該應用。
  • 如果readAgaintrue,它會在每次函數調用時重複讀取默認值 的值。但是,它不會將 值重置爲默認值,如果它們已被 應用程序設置或更改。
+0

+1好一點,如果這最後的一絲不解決問題再沒有什麼:-D – Knickedi

+1

嘗試已經太..沒有改善,它仍然無法從XML – JonEasy

+0

@JhonnyR值是否有可能的是,這些「不正確」值已被保存爲當前設置值?在這種情況下,這個方法不會用默認值覆蓋它們。再次,根據文檔:將'readAgain'設置爲'true'不會將首選項重置爲默認值。對於該功能,使用'getDefaultSharedPreferences(Context)'並清除它,然後調用此方法,並將此參數設置爲'true'。將來,當您開始正確初始化默認值時,不需要清除。 – GrAnd