Android 从arrays.xml检索多维数组中的数据
假设我在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> &
<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);
}