Imo*_*mon 18 java xml android multidimensional-array android-xml
假设我在android资源中存储了一个二维数组,如下所示.如何在像Arraylist这样的java集合中获取它们?
<resources>
<string-array name="countries_array">
<item>
<name>Bahrain</name>
<code>12345</code>
</item>
<item>
<name>Bangladesh</name>
<code>54545</code>
</item>
<item>
<name>India</name>
<code>54455</code>
</item>
</string-array>
</resources>
Run Code Online (Sandbox Code Playgroud)
例如,在一维数组的情况下,我们可以使用它
getResources().getStringArray(R.array.countries_array);
Run Code Online (Sandbox Code Playgroud)
当countries_array就像
<resources>
<string-array name="countries_array">
<item>Bahrain</item>
<item>Bangladesh</item>
<item>India</item>
</string-array>
</resources>
Run Code Online (Sandbox Code Playgroud)
Squ*_*onk 37
<string-array>资源文件的元素只能用于单维数组.换句话说,之间的一切<item>和</item>被认为是一个字符串.
如果您希望以您描述的方式存储数据(实际上是伪XML),您需要将这些项目作为单个项目String[]使用getStringArray(...)并自行解析<name>和<codes>元素.
就个人而言,我可能会采取限制格式,如......
<item>Bahrain,12345</item>
Run Code Online (Sandbox Code Playgroud)
...然后只是使用split(...).
或者,将每个定义<item>为JSONObject,例如......
<item>{"name":"Bahrain","code":"12345"}</item>
Run Code Online (Sandbox Code Playgroud)
我写了另一种方法,而不是多值条目,你可以将复杂对象存储为数组,然后使用增量整数将名称后缀.如果需要,循环遍历它们并从那里创建强类型对象的列表.
<resources>
<array name="categories_0">
<item>1</item>
<item>Food</item>
</array>
<array name="categories_1">
<item>2</item>
<item>Health</item>
</array>
<array name="categories_2">
<item>3</item>
<item>Garden</item>
</array>
<resources>
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建一个静态方法来检索它们:
public class ResourceHelper {
public static List<TypedArray> getMultiTypedArray(Context context, String key) {
List<TypedArray> array = new ArrayList<>();
try {
Class<R.array> res = R.array.class;
Field field;
int counter = 0;
do {
field = res.getField(key + "_" + counter);
array.add(context.getResources().obtainTypedArray(field.getInt(null)));
counter++;
} while (field != null);
} catch (Exception e) {
e.printStackTrace();
} finally {
return array;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它现在可以这样消耗:
for (TypedArray item : ResourceHelper.getMultiTypedArray(this, "categories")) {
Category category = new Category();
category.ID = item.getInt(0, 0);
category.title = item.getString(1);
mCategories.add(category);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19245 次 |
| 最近记录: |