我使用此字符串数组作为列表视图数组显示在导航抽屉中。
<string-array name="navItems">
<item>Character 1</item>
<item>Character 2</item>
<item>Character 3</item>
<item>Character 4</item>
<item>Character 5</item>
<item>Character 6</item>
<item>Character 7</item>
<item>Character 8</item>
<item>Character 9</item>
<item>Character 10</item>
</string-array>
我希望用户能够通过输入每个字符的名称来更改这些项目,类似于标题更改为相应字符的名称的方式。 (见下文)
if (pref.contains("name")) {
getActionBar().setTitle(pref.getString("name", "Character 1"));
} else {
getActionBar().setTitle("Character 1");
}
无论如何都要以编程方式更改这些数组项,以便在用户命名该字符时可以更改它们吗?
感谢您的时间。
答案 0 :(得分:0)
您无法修改getResources().getStringArray(R.id.navItems)
返回的内容。这些值是固定的。但您可以将已修改的信息存储在共享首选项中
因为偏好是关键&gt;值存储,您需要定义密钥的工作方式。仅"name"
不足以存储10个不同的名称
一种常见的方法是定义2个数组,一个包含键,一个包含自定义翻译文本。两者都需要具有相同的长度。
<string-array name="navItemKeys">
<item>char_1</item>
<item>char_1</item>
...
然后在这些键下保存自定义名称。要为适配器加载名称数组,您可以执行类似
的操作String[] loadArray(Context context, SharedPreferences prefs) {
String[] defaultNames = context.getResources().getStringArray(R.array.navItems);
String[] lookupKeys = context.getResources().getStringArray(R.array.navItemKeys);
String[] result = new String[defaultNames.length];
for (int i = 0; i < lookupKeys.length; i++) {
String lookupKey = lookupKeys[i];
String defaultName = defaultNames[i];
result[i] = prefs.getString(lookupKey, defaultName);
}
return result;
}