2012-10-01 80 views
3

假設我有一個資源的XML文件是這樣的:如何在Android中按名稱獲取類型數組資源的值?

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <array name="difficulties"> 
     <item> 
      <integer name="level">1</integer> 
      <integer name="fixed_blocks">2</integer> 
      <integer name="color_count">2</integer> 
     </item> 
     <item> 
      <integer name="level">2</integer> 
      <integer name="fixed_blocks">4</integer> 
      <integer name="color_count">3</integer> 
     </item> 
     <item> 
      <integer name="level">3</integer> 
      <integer name="fixed_blocks">6</integer> 
      <integer name="color_count">3</integer> 
     </item> 
    </array>  
</resources> 

如何,我可以得到從item的名字整數值? TypedValue的API似乎沒有包含任何方法。如果這不可能與TypedArray這是怎麼回事?

如果我可以通過它的序號從項目中獲得一個值,它也可以。

回答

5

我不記得這是可能的(但我可能是錯的)。根據項目的結構(在difficulties數組中)可以做其他事情,您可以使用整數數組的數組。知道該項目數組在第一個位置有levelfixed_blocks作爲第二個位置,您可以輕鬆獲得值。這方面的例子,你可以在這裏找到Android Resource - Array of Arrays

編輯: 這是你要尋找的方法是什麼?

private int[] getLevelConstants(int level) { 
    int[] result = null; 
    TypedArray ta = getResources().obtainTypedArray(R.array.difficulties); 
    // keep in mind the differences between the level(starts at 1) and the index of the difficulties array which starts at 0 
    int id = ta.getResourceId(level, 0); 
    if (id > 0) { 
     result = getResources().getIntArray(id); 
    } else { 
     // something bad 
    } 
    return result; 
} 

和陣列將是:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <integer-array name="difficulties"> 
     <item>@array/level1</item> 
     <item>@array/level2</item> 
    </integer-array> 

    <integer-array name="level1" > 
     <item>1</item> 
     <item>2</item> 
     <item>2</item> 
    </integer-array> 

    <integer-array name="level2" > 
     <item>2</item> 
     <item>4</item> 
     <item>3</item> 
    </integer-array> 

</resources> 
+0

這樣做的問題是,我從指向一個特定困難(所以我得到2例如)另一活性接收的索引,並且我需要通過索引獲取TypedArray中的元素,然後檢查其元素。 –

+0

@AdamArold通過難度2,你指的是在數組項中的「level」2,對吧?如果是這種情況,那麼'level'整數與'difficulty'數組的索引有一個簡單的映射關係,您只需要減去'1'(''難度''數組從0開始索引,並且從1開始)從索引和你有它。 – Luksprog

+0

沒有問題是我不能使用R.array.difficulties.level1例如因爲我不能在我的程序中硬編碼,我只有一個索引。我不能使用R.array.difficulties,因爲我無法從方法中提取我的iteger-array,我只能提取字符串數組。因此,我沒有所需的資源ID,以便從資源查找它。我只是有一個資源內部元素的序號。 –