应用列表首选项中的更改

时间:2012-03-29 03:24:51

标签: android preferences sharedpreferences listpreference

我有一个包含两个值的列表首选项,我想用另一个数组中的值更新这两个值。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
     Resources resources = this.getResources();
     String languageData = prefs.getString("languageAlias", " ");
     String[] languageAlias = resources.getStringArray(R.array.languageAlias);
     String[] voiceData = resources.getStringArray(R.array.voiceData);

     int a = 0;
     for(a=0; a<languageAlias.length; a++){
     if(languageData.equals(languageAlias[a]))
     {
         //this is where I have problems
         prefs.edit().putString("voiceAlias", voiceData[2*a]);
         prefs.edit().commit();
         break;
     }

我已经能够使用它直到我必须使用puString命令进行更改和提交。另外我如何指定列表首选项中我想要更改的项目,因为我需要传递给putString函数的所有项都是键?

2 个答案:

答案 0 :(得分:0)

之后:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

你需要添加:

SharedPreferences.Editor editor = prefs.edit();

然后代替

prefs.edit().putString("voiceAlias", voiceData[2*a]);
prefs.edit().commit();

使用

editor.putString("voiceAlias", voiceData[2*a]);
editor.commit();

edit()上的文档说:

  

为这些偏好设置新的编辑器

这意味着每次调用prefs.edit()时,它都会创建一个新的Editor对象,因此当您使用prefs.edit().putString(...)添加字符串时以及使用prefs.edit().commit()提交时,您就是引用两个新的,不同的Editor对象。

我相信你也可以做prefs.edit().putString(...).commit(),但我不确定这是否可行。

答案 1 :(得分:0)

您不能将String数组写入SharedPreferences。你需要改变它。你可以使用

  

putStringSet(字符串键,设置值)

但这只能从API Level 11开始提供。所以检查一下。或者你可以将你的数组转换为单个字符串或JSON字符串(我在其他地方看到的例子)

请查看以下链接。 Is it possible to add an array or object to SharedPreferences on Android