ListPreferences的奇怪行为

时间:2010-04-02 14:16:04

标签: android

这是我面临的问题:在我的应用程序中,我有几个存储在sharedPreferences中的首选项,记录了应用程序的不同设置。这些是一些字符串。因为我希望应用程序以这些设置的某些默认值开始,所以在onCreate中我为每个设置构造一个“Setting”对象,我在其中检查相关的sharedPreference是否为null,如果是,那么我将默认值设置为sharedPreference。

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在xml中构造,方法是将数组设置为“entries标签”和“values标签”。我不确定,我应该将什么传递给默认的Setting对象的构造函数,entries数组的成员,还是值一个的东西!如果我传递一个条目的成员,Listpreferences将具有预期的行为,而一些将具有上述的行为。如果我不这样做并从values数组传递一些东西,同样的事情发生了!有没有人为什么这么奇怪的行为?

2 个答案:

答案 0 :(得分:1)

您应该查看首选项文件,并识别我们的ListPreference使用的密钥和格式,然后在SharedPreferences.Editor中使用相同的键值对

您将在以下文件夹中找到您的prefs文件

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

你通过在控制台中运行来实现目标:

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

答案 1 :(得分:0)

由于SharedPreferences.getString()的第二个参数是默认值,如果该键不存在将返回该值,您可以轻松编写

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