Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从arrays.xml检索多维数组中的数据_Android_Xml_Multidimensional Array - Fatal编程技术网

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

Android 从arrays.xml检索多维数组中的数据,android,xml,multidimensional-array,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> &

假设我在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>

A.
B
C
D
@阵列/级别1-1
@阵列/级别1-2
E
F
G
H
@阵列/级别2-1
@阵列/级别2-2
@阵列/级别1
@阵列/级别2
现在我想在我的Android应用程序中阅读它。通过阅读这里的类似问题,我得出了一个结论,TypedArray是检索数据的正确方法,虽然作为TypedArray检索整个三维块并不困难,但似乎没有任何工具可以使用它们的ID检索另一个TypedArray


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

首先可以从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);
List table1-1=Array.asList(getResources().getStringArray(R.Array.table1-1));
List table1-2=Array.asList(getResources().getStringArray(R.Array.table1-1));

HashMap level1=新的HashMap似乎我已经自己解决了。执行检索“切片”任务的一些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)

,虽然这适用于上述示例,但我不确定这是否适用于更大的数组或更多维度,我只是尝试给出最简单的示例。让我们概括一下:我们有一个N维的TypedArray数组,每个维有M(i)个元素,其中i属于[1..N]。我们得到了一个索引K。如何仅使用arrays.xml检索数组[K]来检索数组本身?Java中的ArrayList有一个get(int index)方法。int是一个有符号的32位值,最大值为2147483647。HashMap使用的数组的大小总是2的幂,因此它最多可以是2^30=1073741824 elementsRight,但是如果有5个维度,每个维度中有10个元素,您会怎么做?我正在寻找一种更普遍的方法。
public TypedArray getSlice(TypedArray ta, long k)    {
    Resources res = getResources();

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