2011-04-27 48 views
0

例如,我有一段要读的分层静态配置数据;从数组中命名的数组中读取静态数据?

<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会给我;
数组2数据1,数组2数据2,数组2 SubArray3数据1,数组2 SubArray3数据2

我想要做的是一样的东西;

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

有没有办法让这种事情工作?

注意:数组大小不一定是固定的。

在此先感谢。
Mark

回答

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> 

在你的应用程序,你可以通过调用

XmlResourceParser XMLparser = getResources().getXml(R.xml.config); 

加载XML文件,然后使用方法的XMLResourceParser拉到合适的值。

+0

感谢您的回复。您的评论发送给我正确的方向。我已经设法按照教程http://www.anddev.org/using_xmlresourceparser_to_parse_custom_compiled_xml-t9313.html – mfirth 2011-05-04 21:25:49