在arrays.xml中的Android多维数组

时间:2011-03-03 23:55:28

标签: android multidimensional-array

在一个arrays.xml文件中,在res文件夹中,定义了几个数组:

       <string-array name="all">
       <item> a1 </item>
       <item> a2 </item>
       </string-array>

       <string-array name="a1">
       <item> x </item>
       <item> y </item>
       </string-array>

        <string-array name="a2">
       <item> z </item>
       <item> t </item>
       </string-array>

我想将“all”数组和序列读入依赖于“all”中的选择的a1或a2数组,而不必构建switch / case语句(真正的数组更复杂)。代码看起来像这样,但Java / Android抱怨第二行。它希望R.array成为一个常数 R.array.a1或R.array.a2而不是变量。

是否可以执行以下操作(第2行),

            String[] temp_items = getResources().getStringArray(R.array.all1); 
            String[] items = getResources().getStringArray(R.array.temp_items[0]);    

我也可以通过将数组放在java中的实用程序类中并绕过arrays.xml文件来解决这个问题。

这可能吗?                         A1             a2            

       <string-array name="a1">
       <item> x </item>
       <item> y </item>
       </string-array>

        <string-array name="a2">
       <item> z </item>
       <item> t </item>
       </string-array>

2 个答案:

答案 0 :(得分:5)

我希望这段代码有用。您可以通过resourceName从函数getIdentifier()获取resourceID。

for(int i = 1; i < 3; i++)
{
    int arrayID = getResources().getIdentifier("a" + i,"array",getPackageName());
    items[i] = getResources().getStringArray(arrayID);
}

答案 1 :(得分:0)

R.array中生成的ID不是数组的名称,它实际上是在编译时生成的整数。我很确定如果没有一些额外的代码,这是不可能的。您可以使用反射将名称从all转换为R.array中的实际int常量,但这会有点多。