2012-02-11 61 views
0

我試圖讓這個代碼字符串數組資源字符串數組資源:掌握一個字符串變量

String continent = "europe"; 
getResources().getStringArray(R.array.continent); 

如果鍵入R.array.europe,其確定,但我想這是動態的,所以我在尋找一種方式來使用我這裏字符串變量..

這可能是一個簡單的Java問題,但我都在Java和Android編程相當小白,我沒有找到答案..

在此先感謝;

編輯:所以這裏是我的完整onCreate方法,難道我錯了嗎?

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 
     String continent = (String) getIntent().getExtras().getString("continent"); 

     int holderint = getResources().getIdentifier(continent, "Array", 
       this.getPackageName()); 

     String[] items = getResources().getStringArray(holderint); 


     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       items)); 

    } 

我不知道有關defPackage部分雖然...

回答

2

隨着代碼中動態創建的資源的名稱,你可以看看使用

getResources().getIdentifier(String name, String defType, String defPackage); 

這將返回一個id爲指定的資源。

+0

非常感謝你,它看起來像我需要的,我會嘗試它,並讓你知道 – Vilrouge 2012-02-11 18:35:58

+0

這個答案幫了我很多,謝謝 – Vilrouge 2012-02-11 19:30:56

1

你可以創建一個包含String變量 「R.array。」並附上您的continent對象。

+0

感謝您的回答 – Vilrouge 2012-02-11 17:43:30

+0

但我大陸的對象是一個字符串,把R.array.europe作爲字符串不會做......我需要能夠從字符串獲取資源... – Vilrouge 2012-02-11 17:44:37

+0

我不知道我明白你在說什麼。從你在你的問題中所說的話,這聽起來像大陸是動態的,所以你想拉大陸的基礎上的字符串資源。所以如果你添加「R.array」。無論選擇哪個大洲,都應該獲得「R.array.selectedContinent」作爲結果。 – bschultz 2012-02-11 17:49:00

0

我有同樣的問題。 使用

getResources()則getIdentifier(字符串名稱,字符串DEFTYPE,字符串defPackage)。

:應該是文件中的資源名稱。 (避免添加R.array在資源名稱的開頭,因爲沒有與名稱R.array.yourname沒有資源。) DEFTYPE:應該是「數組」。 defPackage

的問題已經解決了

0

這裏this.getPackageName()是,我發現很容易使用另一種方法:

int resourceId = R.array.class.getField(yourStringVariable).getInt(null); String[] yourStringArray = getResources().getStringArray(resourceId);

注意yourStringVariable是形式爲「歐洲」,而不是「R.array.europe」。

0

您可以使用此獲得數組資源ID:

Sting name = "resource_array_name"; 
int resourceId= getResources().getIdentifier(name, "array",this.getPackageName()); 
String[] items = getResources().getStringArray(resourceId);