2011-02-02 154 views
1

我確定有更好的方法來做到這一點,但我對編程完全不熟悉,所以我提前爲我的不高興道歉。Android:從ArrayList設置資源字符串ID?

這裏是我的問題:

我已經充滿了我的琴絃strings.xml中的名稱參數一個ArrayList,什麼我試圖做的是填補.setText(一個TextView)利用資源的ID是從我的數組的一部分動態創建的。例如...

ArrayList<String> options = new ArrayList<String>(); 
options.add("bacon"); 
options.add("ham"); 

//R.id.option1 is in my layout and R.string.bacon is in my strings.xml 
TextView option1 = (TextView)findViewById(R.id.option1); 
option1.setText(R.string.(options.get(0))); 

這顯然不是我的完整代碼。這只是一個面臨同樣問題的例子。

任何想法?

在此先感謝!

回答

2

作爲一種理念,而不是名稱的String數組,你可以有資源ID的int數組:

ArrayList<Integer> options = new ArrayList<Integer>(); 
options.add(R.string.bacon); 
options.add(R.string.ham); 

//R.id.option1 is in my layout and R.string.bacon is in my strings.xml 
TextView option1 = (TextView)findViewById(R.id.option1); 
option1.setText(options.get(0)); 
0

這聽起來像你要查找的資源ID的名稱,以便您可以在所期望的整數ID呼叫使用它(例如,在findViewById()):

Resources.getIdentifier()

public int getIdentifier (String name, String defType, String defPackage) 
Since: API Level 1 

返回給定資源名稱的資源標識符。完全限定的資源名稱形式爲「package:type/entry」。如果在這裏指定defType和defPackage,前兩個組件(包和類型)是可選的。 注意:不鼓勵使用此功能。通過標識符而不是按名稱檢索資源要高效得多。

例子:

String name = "bacon"; 
int id = resources.getIdentifier(name, "string", "com.package"); 
if (id == 0) { 
    Log.e(TAG, "Lookup id for resource '"+name+"' failed"; 
    // graceful error handling code here 
} 

String fullyQualifiedResourceName = "com.package:string/bacon"; 
int id = resources.getIdentifier(title, null, null); 
if (id == 0) { 
    Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed"; 
    // graceful error handling code here 
} 
+1

這工作完美。非常感謝你! – Jared 2011-02-02 04:34:57

+0

@Jared - 很高興幫助。 @Ted Hopp的想法也是一個很好的想法 - 值得考慮。 – 2011-02-02 04:36:58

相關問題