如何从Android的xml字符串资源中检索2D数组?

假设我在android资源中存储了一个二维数组,如下所示。 如何在像Arraylist这样的java集合中获取它们?

   Bahrain 12345   Bangladesh 54545   India 54455    

例如,在1维数组的情况下,我们可以使用它

 getResources().getStringArray(R.array.countries_array); 

当countries_array就像

   Bahrain Bangladesh India   

资源文件的元素只能用于单维数组。 换句话说, 之间的所有内容都被视为单个字符串。

如果您想以您描述的方式存储数据(实际上是伪XML),您需要使用getStringArray(...)将项目作为单个String[]获取并解析元素你自己。

就个人而言,我可能会采用限制格式,例如……

 Bahrain,12345 

…然后只使用split(...)

或者,将每个定义为JSONObject,例如……

 {"name":"Bahrain","code":"12345"} 

我写了另一种方法,而不是多值条目,你可以将复杂对象存储为数组,然后使用增量整数将名称后缀。 如果需要,循环遍历它们并从那里创建强types对象的列表。

   1 Food   2 Health   3 Garden   

然后,您可以创建一个静态方法来检索它们:

 public class ResourceHelper { public static List getMultiTypedArray(Context context, String key) { List array = new ArrayList<>(); try { Class 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; } } } 

它现在可以这样消耗:

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