2010-04-02 31 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