我正在尝试实现一个包含数组数组的资源数据结构,特别是字符串。我遇到的问题是如何获取子数组对象及其特定值。这是我的资源文件的样子....
<resources>
<array name="array0">
<item>
<string-array name="array01">
<item name="id">1</item>
<item name="title">item one</item>
</string-array>
</item>
<item>
<string-array name="array02">
<item name="id">2</item>
<item name="title">item two</item>
</string-array>
</item>
<item>
<string-array name="array03">
<item name="id">3</item>
<item name="title">item three</item>
</string-array>
</item>
</array>
</resources>
然后,在我的Java代码中,我检索数组并尝试访问子元素,如此...
TypedArray typedArray = getResources().obtainTypedArray(R.array.array0);
TypedValue typedValue = null;
typedArray.getValue(0, typedValue);
此时,typedArray对象应该表示字符串数组“array01”,但是,我没有看到如何检索“id”和“title”字符串元素。任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:114)
你几乎可以做你想做的事。您必须分别声明每个数组,然后是一个引用数组。像这样:
<string-array name="array01">
<item name="id">1</item>
<item name="title">item one</item>
</string-array>
<!-- etc. -->
<array name="array0">
<item>@array/array01</item>
<!-- etc. -->
</array>
然后在你的代码中你会做这样的事情:
Resources res = getResources();
TypedArray ta = res.obtainTypedArray(R.array.array0);
int n = ta.length();
String[][] array = new String[n][];
for (int i = 0; i < n; ++i) {
int id = ta.getResourceId(i, 0);
if (id > 0) {
array[i] = res.getStringArray(id);
} else {
// something wrong with the XML
}
}
ta.recycle(); // Important!
答案 1 :(得分:0)
<integer-array name="id_array">
<item>1</item>
<item>2</item>
<item>3</item>
</integer-array>
<string-array name="name_array">
<item>name 1</item>
<item>name 2</item>
<item>name 3</item>
</string-array>
<array name="array0">
<item>@array/id_array</item>
<item>@array/name_array</item>
</array>
确保子阵列的行数相同
享受写代码访问阵列单元!
android仍然是一个孩子,同时保持TypedArray“array0”的丑陋“item”标签
在我看来,最灵活的应该是:
<array name="array0">
<integer-array name="id_array">
<item>1</item>
<item>2</item>
<item>3</item>
</integer-array>
<string-array name="name_array">
<item>name 1</item>
<item>name 2</item>
<item>name 3</item>
</string-array>
</array>
但不要这样做,因为那不是安卓方式:)
答案 2 :(得分:0)
https://developer.android.com/guide/topics/resources/more-resources.html#Color
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="icons">
<item>@drawable/home</item>
<item>@drawable/settings</item>
<item>@drawable/logout</item>
</array>
<array name="colors">
<item>#FFFF0000</item>
<item>#FF00FF00</item>
<item>#FF0000FF</item>
</array>
</resources>
此应用程序代码检索每个数组,然后获取每个数组中的第一个条目:
Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);
TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);
答案 3 :(得分:-3)
Array不是名称/值对。您只能按编号访问元素。 xml中的语法错误。它应该是这样的:
<string-array name="string_array_name">
<item>text_string1</item>
<item>text_string2</item>
</string-array>