这是我面临的问题:在我的应用程序中,我有几个存储在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数组传递一些东西,同样的事情发生了!有没有人为什么这么奇怪的行为?
答案 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);
}