我有一堆我希望阅读的分层静态配置数据,例如;
<string-array name="Root">
<item>Array1</item>
<item>Array2</item>
<item>Array3</item>
</string-array>
<string-array name="Array1">
<item>Array1 Data1</item>
<item>Array1 Data2</item>
<item>Array1 SubArray1</item>
<item>Array1 SubArray2</item>
<item>Array1 SubArray3</item>
</string-array>
<string-array name="Array1 SubArray1">
<item>Array1 SubArray1 Data1</item>
<item>Array1 SubArray1 Data2</item>
</string-array>
<string-array name="Array2">
<item>Array2 Data1</item>
<item>Array2 Data2</item>
<item>Array2 SubArray1</item>
<item>Array2 SubArray2</item>
<item>Array2 SubArray3</item>
</string-array>
<string-array name="Array1 SubArray3">
<item>Array2 SubArray3 Data1</item>
<item>Array2 SubArray3 Data2</item>
</string-array>
加入1,1会给我;
Array1 Data1,Array1 Data2,Array1 SubArray1 Data1,Array1 SubArray1 Data2
虽然输入2,3会给我;
Array2 Data1,Array2 Data2,Array2 SubArray3 Data1,Array2 SubArray3 Data2
我想做的事情就像是;
Resources res = getResources();
String[] RootArray = res.getStringArray(R.array.Root);
String[] Array = res.getStringArray(R.array.RootArray[1]);
String[] SubArray = res.getStringArray(R.array.Array[1]);
有没有办法让这类事情发挥作用?
注意:阵列大小不一定是固定的。
提前致谢。
标记
答案 0 :(得分:1)
使用命名数组无法实现此确切行为。但是,使用自定义XML解析器完全可以这样做,可以从the XML libraries included with Android轻松编写。
问题是当你引用R
时,你正在引用一个自动生成的静态整数,android编译器创建它来引用一个资源。实际编译应用程序时,java编译器会将对数字的引用替换为实际数字。因此,
res.getStringArray(R.array.MyArray);
真的变得像
res.getStringArray(0x12345);
这显然不是一个真正的“数组”。
要实现所需的功能,请在/res/xml/config.xml
:
<my-config>
<array name="Array1">
<data>Item 1</data>
<data>Item 2</data>
<array name="SubArray 1">
<data>Item 4</item>
</array>
</array>
</my-config>
在您的应用程序中,您可以通过调用
来加载XML文件XmlResourceParser XMLparser = getResources().getXml(R.xml.config);
然后使用XMLResourceParser的方法来提取适当的值。