用xml引用字符串数组资源中的字符串

我有偏好,你可以启用/禁用什么项目将显示在菜单上。一共有17项。我在values/arrays.xml中创建了一个字符串数组,为这17个项目中的每一个都设置了标题。

我有preferences.xml,其中有我的首选项文件的布局,我想从字符串数组中引用一个项目作为标题。

我该怎么做呢?

在Android开发人员引用中,我看到了如何使用XML引用单个字符串,但没有看到如何从XML中的数组资源引用字符串。

311497 次浏览

也许这个会有帮助:

String[] some_array = getResources().getStringArray(R.array.your_string_array)

所以你得到一个String[]形式的数组列表,然后选择任意i, some_array[i]。

不幸的是:

  • 在values/arrays.xml中,似乎不能使用XML引用数组中的单个项。当然在Java中可以,但在XML中不行。在Android开发人员的参考资料中没有这样做的信息,我也找不到任何其他地方。

  • 似乎你不能在首选项布局中使用数组作为键。每个键必须是一个单独的值,具有自己的键名。

我想要完成的是: 我希望能够遍历17个首选项,检查项目是否被选中,如果是,则从该首选项名称的字符串数组中加载字符串

下面是我希望完成这个任务的代码:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
ArrayAdapter<String> itemsArrayList = new ArrayAdapter<String>(getBaseContext(),   android.R.layout.simple_list_item_1);
String[] itemNames = getResources().getStringArray(R.array.itemNames_array);




for (int i = 0; i < 16; i++) {
if (prefs.getBoolean("itemKey[i]", true)) {
itemsArrayList.add(itemNames[i]);
}
}

我做了什么:

  • 为每个项设置一个字符串,并在。我对首选项布局复选框标题使用单个字符串引用,对循环使用数组。

  • 为了遍历首选项,我只将键命名为key1、key2、key3等。因为使用字符串引用键,所以可以选择在运行时“构建”键名。

新代码如下:

for (int i = 0; i < 16; i++) {
if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {
itemsArrayList.add(itemNames[i]);
}
}
更好的选择是只使用资源返回的数组作为数组, 意义:< / p >

getResources().getStringArray(R.array.your_array)[position]

这是其他提到的方法的一种捷径,但以你想要的方式工作。否则,Android不会为基于XML的数组提供直接的XML索引。

另一种方法是在strings.xml中定义一个资源数组,如下所示。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [
<!ENTITY supportDefaultSelection "Choose your issue">
<!ENTITY issueOption1 "Support">
<!ENTITY issueOption2 "Feedback">
<!ENTITY issueOption3 "Help">
]>

然后使用上述资源定义一个字符串数组

<string-array name="support_issues_array">
<item>&supportDefaultSelection;</item>
<item>&issueOption1;</item>
<item>&issueOption2;</item>
<item>&issueOption3;</item>
</string-array>
你也可以将相同的字符串引用到其他xml中,保持DRY的完整性。 我看到的好处是,一个值的改变将影响代码中的所有引用

答案很容易实现。

String[] arrayName = getResources().getStringArray(R.array.your_string_array);

现在你可以通过索引(假设第i个索引)访问数组的任何元素,然后你可以通过arrayName[i]访问它

我希望你能理解这一点