2013-07-04 63 views
1

背景: 對於我的Android應用程序,我使用ListView和列表項觸發聲音,它們作爲.ogg文件存儲在/ res/raw /目錄中。我能夠通過存儲在strings.xml中的字符串數組自動設置文本標籤和列表視圖的長度,現在我需要一個額外的ResIDs數組,我希望在那裏存儲以便於在未來方便地擴展列表視圖。如何將此java數組轉換爲xml?

工作代碼: 對於字符串數組,我用這個代碼: 的Java代碼片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
... 
titles = getResources().getStringArray(R.array.listoftitles); 

XML(strings.xml中):

<string-array name="listoftitles"> 
    <item>Title1</item> 
    <item>Title2</item> 
</string-array> 

問題的代碼: 的Java代碼片段:

filenames = new int[]{R.raw.both1, R.raw.both2, R.raw.both3, R.raw.both4, R.raw.both5 
      , R.raw.both6, R.raw.both7, R.raw.both8, R.raw.both9, R.raw.both10, R.raw.both11 
      , R.raw.both12, R.raw.both13, R.raw.both14, R.raw.both15, R.raw.both16, R.raw.both17 
      , R.raw.both18, R.raw.both19}; 

目標:

private void populatemylist() { 
    for (int i = 0; i < titles.length; i++) { 
     itemsdb.add(new Item(titles[i], descriptions[i], filenames[i])); 
    } 

} 

方法populatemylist()的便利性是至關重要的,而標題[]和描述[]是從XML陣列容易取出,它不爲文件名,這是我需要作爲渣油/ INT的工作值。我嘗試過使用整數數組,以及帶有TypedArray Java後端的通用數組,但是這似乎是針對drawable的,我只是無法從/ res/raw /文件夾中獲取任何東西。我想有一個簡單的陣列解決方案,即雲中的strings.xml在

<item>R.raw.both1</item> 

時尚和簡單的Java後端,這讓我的那些文件名的int數組。

回答

1

你需要使用TypedArray,讓我知道如果你有任何問題,否則goodluck!

filenames.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
     <string-array name="random_imgs"> 
     <item>@raw/both1</item> 
     <item>@raw/both2</item> 
     <!-- ... --> 
    </string-array> 

</resources> 

private int getFileNameAtIndex(int index) { 
     TypedArray fileNames = getResources().obtainTypedArray(R.array.filenames); 
     // or set you ImageView's resource to the id 
     int id = fileNames.getResourceId(index, -1); //-1 is default if nothing is found (we don't care) 
     fileNames.recycle(); 
     return id; 
    } 
+1

太謝謝你了!這正是我需要的。所有其他的stackoverflow問題和教程總是在Fragment中使用一個本地int [],並嘗試將整個數組轉換。這很好,因爲它只通過一種方法獲得重要的當前價值,這就是所有其他非工作解決方案所缺失的。 –