Answers:
简而言之:我认为您不能,但是似乎有一种解决方法:。
如果您在这里查看Android资源:
http://developer.android.com/guide/topics/resources/string-resource.html
您会比在数组部分(至少是字符串数组)下看到的“ RESOURCE REFERENCE”(从XML中获得)没有指定解决单个项目的方法。您甚至可以尝试在XML中使用“ @ array / yourarray此处”。我知道在设计时您将获得第一项。但是,如果您要使用的话,那实际上是没有用的。假设……第二个。
但是,有一个技巧可以解决。看这里:
您可以通过在数组定义内部寻址独立字符串来“欺骗”(不是真的)数组定义。例如,在您的strings.xml中:
<string name="earth">Earth</string>
<string name="moon">Moon</string>
<string-array name="system">
<item>@string/earth</item>
<item>@string/moon</item>
</string-array>
通过使用此选项,您可以在“ android:text”和“ android:title” XML字段中正常使用“ @ string / earth”和“ @ string / moon”,但不会失去使用数组的能力首先定义的目的。
似乎可以在我的Eclipse上使用。您为什么不尝试告诉我们是否可行?:-)
strings.xml
但未定义该数组,values-fr
并且该数组仍使用法语版本进行了更新。错了..但是很酷!
也许这会有所帮助:
String[] some_array = getResources().getStringArray(R.array.your_string_array)
因此,您将数组列表作为String []获得,然后选择任何i,some_array [i]。
String myPref = preferences.getString(context.getResources().getString(R.string.my_pref), some_array [0]);
其中my_pref先前设置为某个值some_array [x]
更好的选择是将资源返回的数组用作数组,这意味着:
getResources().getStringArray(R.array.your_array)[position]
这是上述方法的捷径,但是可以按照您想要的方式进行。否则,android不会为基于xml的数组提供直接XML索引。
不幸:
似乎您无法使用XML在values / arrays.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]);
}
}
另一种方法是在string.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完整。我看到的好处是,更改单个值将影响代码中的所有引用。
name
<item> s ... * sigh *