首页 > 如何把数据动态地写进array.xml的string-array里?

如何把数据动态地写进array.xml的string-array里?

我百度过后,都是千篇一律地教人怎样获取string-array里的东西,但却没有找到怎么往string-array的教程,所以来这里问问各位大虾~
希望有那么一个功能吧QwQ。。。不然要另求他道就太麻烦了。谢谢!


如果你有需求往string-array里放东西, 就不应该放在string-array里啊。。


Resources资源文件(res/)不允许在运行时修改,包括String Array。
如果你仅仅是需要保存一组字串的话,可以考虑`SharedPreferences,

// API level 11
SharedPreferences.Editor.putStringSet(String key, Set<String> values);
Set<String> getStringSet(String key, Set<String> defValues);

举个栗子:

private static final String PREF_KEY_STRINGS = "key_strings";

private void saveStringsToPref(ArrayList<String> list) {
    Set<String> set = new HashSet<String>();
    set.addAll(list);
    PreferenceManager.getDefaultSharedPreferences(this)
        .edit()
        .putStringSet(PREF_KEY_STRINGS, set)
        .commit();
}

// 需要注意,返回的ArrayList中元素的顺序可能和存储时的不一致。
private ArrayList<String> getStringsFromPref() {
    Set<String> set = PreferenceManager.getDefaultSharedPreferences(this)
        .getStringSet(PREF_KEY_STRINGS, null);
    return new ArrayList<String>(set);
}

Update

Q: 再请教一下你,是所有的在/res(包括自定义的xml)都不可以在运行时修改,是吗?如果我把自定义的xml放在工程的最外一层呢?是否可以对其进行修改?

A: 资源文件是被预编译的,所以运行时无法修改。而且Android是根据特定目录也就是res/...来寻找资源文件。
我不清楚你把自定义的xml放到外层,是否能在运行时引用这个文件(估计不可以,未测试)。
有两种方式可以达到你保存文件的目的:Internal StorageExternal Storage。前一种为app私有,后一种存储到sdcard,任何app都可以访问。
可以参考:http://developer.android.com/guide/topics/data/data-storage.html

所以,可以把初始文件放到 res/ 或者 assets/ 中,运行时读取,需要修改时再写入到上述两种storage中。
每次需要读取或者修改时,先判断storage中是否有这个文件,若有,读取;若无,读取初始文件。

【热门文章】
【热门文章】