Resources资源文件(res/)不允许在运行时修改,包括String Array。
如果你仅仅是需要保存一组字串的话,可以考虑`SharedPreferences,
// API level 11
SharedPreferences.Editor.putStringSet(String key, Set values);
Set getStringSet(String key, Set defValues);
举个栗子:
private static final String PREF_KEY_STRINGS = "key_strings";
private void saveStringsToPref(ArrayList list) {
Set set = new HashSet();
set.addAll(list);
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putStringSet(PREF_KEY_STRINGS, set)
.commit();
}
// 需要注意,返回的ArrayList中元素的顺序可能和存储时的不一致。
private ArrayList getStringsFromPref() {
Set set = PreferenceManager.getDefaultSharedPreferences(this)
.getStringSet(PREF_KEY_STRINGS, null);
return new ArrayList(set);
}
Update
Q: 再请教一下你,是所有的在/res(包括自定义的xml)都不可以在运行时修改,是吗?如果我把自定义的xml放在工程的最外一层呢?是否可以对其进行修改?
A: 资源文件是被预编译的,所以运行时无法修改。而且Android是根据特定目录也就是res/...来寻找资源文件。
我不清楚你把自定义的xml放到外层,是否能在运行时引用这个文件(估计不可以,未测试)。
有两种方式可以达到你保存文件的目的:Internal Storage和External Storage。前一种为app私有,后一种存储到sdcard,任何app都可以访问。
可以参考:http://developer.android.com/guide/topics/data/data-storage.html
所以,可以把初始文件放到 res/ 或者 assets/ 中,运行时读取,需要修改时再写入到上述两种storage中。
每次需要读取或者修改时,先判断storage中是否有这个文件,若有,读取;若无,读取初始文件。