2011-04-27 72 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