从数组中命名的数组中读取统计信息?

时间:2011-04-27 00:07:28

标签: android

我有一堆我希望阅读的分层静态配置数据,例如;

<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]);

有没有办法让这类事情发挥作用?

注意:阵列大小不一定是固定的。

提前致谢。
标记

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

中创建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的方法来提取适当的值。