根据if else语句更改字符串数组项

时间:2014-11-26 02:20:22

标签: java android navigation-drawer arrays

我使用此字符串数组作为列表视图数组显示在导航抽屉中。

<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");
    }

无论如何都要以编程方式更改这些数组项,以便在用户命名该字符时可以更改它们吗?

感谢您的时间。

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;
}