2010-04-02 69 views
0

下面是我遇到的問題:在我的應用程序中,我有幾個首選項存儲在sharedPreferences中,它們記錄了應用程序的不同設置。這些是一些字符串。因爲我希望應用程序以這些設置的一些默認值開始,所以在onCreate中,我爲每個設置構造一個「設置」對象,在其中檢查相關的sharedPreference是否爲null,如果是這樣,則將默認值置於sharedPreference。ListPreferences的奇怪行爲

Setting(int setting, String default) 
{ 
    storedPref=sharedPref.getString(getText(setting),null); 
    if(storedPref==null) 
    { 
     SharedPreferences.Editor edit=sharedPred.edit() 
     edit.putString(getText(setting),default); 
     edit.comit 
    } 
} 

與這些設置關聯的視圖是ListPreferences()。當第一次打開應用程序時,它們應該顯示一個選項列表,其中選定的選項是默認選項,但是有時候不會選擇任何選項,甚至不選擇默認選項。

listPreferences是通過將數組設置爲「entries tag」和「values tag」來構建的。我不太確定,我應該傳遞給Setting對象的默認構造函數,entries數組的成員還是來自值的某個值!如果我傳遞了一些條目,那麼Listpreferences將會有預期的行爲,其中一些會有上面描述的行爲。如果我不這樣做,並從值數組中傳遞一些東西,同樣的事情發生!有沒有人有任何意識爲什麼這種奇怪的行爲?

回答

0

由於SharedPreferences.getString()的第二個參數是如果該鍵不存在,將返回默認值,你可以很容易地編寫

Setting(int setting, String default) 
{ 
    storedPref=sharedPref.getString(getText(setting),default); 
} 
+0

是的,但比並不意味着默認將被保存,這正是我所需要的。 – 2010-04-02 15:15:59

1

你應該檢查首選項文件,和識別鍵和格式用於我們的ListPreference,然後使用相同的密鑰值對您的SharedPreferences.Editor

,你會發現你的首選項文件在以下文件夾

/data/data/com.your.package/shared_prefs/ 

你有在控制檯中運行:

adb shell 
cd /data/data/com.your.package/shared_prefs/ 
ls 
+0

按鍵和格式是什麼意思? – 2010-04-02 15:13:45

+0

如果您的設置鍵和格式與數值(K,V)相同,則比我在保存默認值時使用相同的參數 – 2010-04-02 15:15:21