在一个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>
答案 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常量,但这会有点多。