从arrays.xml从多维数组中检索数据

时间:2014-09-15 08:30:29

标签: android xml multidimensional-array

假设我在arrays.xml中有一个三维数组,比如

<string-array name="level1-1">
    <item name="id">a</item>
    <item name="id">b</item>
</string-array>
<string-array name="level1-2">
    <item name="id">c</item>
    <item name="id">d</item>
</string-array>
<array name="level1">
    <item>@array/level1-1</item>
    <item>@array/level1-2</item>
</array>
<string-array name="level2-1">
    <item name="id">e</item>
    <item name="id">f</item>
</string-array>
<string-array name="level2-2">
    <item name="id">g</item>
    <item name="id">h</item>
</string-array>
<array name="level2">
    <item>@array/level2-1</item>
    <item>@array/level2-2</item>
</array>
<array name="top_level">
    <item>@array/level1</item>
    <item>@array/level2</item> 
</array>

现在我想在我的Android应用程序中阅读它。通过阅读类似的问题,我得出结论,TypedArrays是检索数据的正确方法,虽然不难将整个三维块检索为TypedArray,但似乎没有任何工具可以检索另一个TypedArrays使用他们的ID。

那么如何从三维TypedArray中检索二维“切片”呢?

2 个答案:

答案 0 :(得分:1)

您可以从xml

获取数组
   List<String> tablel1-1 = Array.asList(getResources().getStringArray(R.array.table1-1));
   List<String> tablel1-2 = Array.asList(getResources().getStringArray(R.array.table1-1));

   HashMap<List<String>,List<String>> level1 = new HashMap<List<String>,List<String>(table1-1,table1-2);


   List<String> tablel2-1 = Array.asList(getResources().getStringArray(R.array.table2-1));
   List<String> tablel2-2 = Array.asList(getResources().getStringArray(R.array.table2-1));

   HashMap<List<String>,List<String>> level2 = new HashMap<List<String>,List<String>(table2-1,table2-2);

最后,如果需要,您可以使用两个HashMap创建HashMap。

    Hashmap<Hashmap<List<String>,List<String>>,Hashmap<List<String>,List<String>>> top_level = new
                 Hashmap<Hashmap<List<String>,List<String>>,Hashmap<List<String>,List<String>>>(level1,level2);

答案 1 :(得分:0)

好像我已经自己弄清楚了。一些Java代码执行检索“切片”的任务,如上例所示:

public TypedArray getSlice(TypedArray ta, long k)    {
    Resources res = getResources();

    int id = ta.getResourceId((int)k, 0);
    return res.obtainTypedArray(id);
}

与问题中给出的示例一样,函数调用应为getSlice(array, K)