2011-12-29 129 views
5

在我的應用程序中我做了一個Web請求,返回一些結果代碼,例如105.我有一個看起來像Android動態字符串資源

<string name="r105">O.K.</string> 
<string name="r106">Something went wrong.</string> 
<string name="r333">Fatal error.</string> 

字符串資源現在我想要做這樣的事情

Toast.makeText(parent.getApplicationContext(), 
     parent.getString(R.string.r+resultCode), Toast.LENGTH_LONG).show(); 

r+resultCode是資源標識符。

這不起作用。任何想法如何做到這一點?

+0

在上面的代碼中,你使用了資源作爲r105,但是在訪問你寫入的R.string.r時是否正確? – 2011-12-29 13:06:59

+0

現在我明白了你的問題,我會試着給我5分鐘。 – 2011-12-29 13:17:40

回答

13

以簡單的方式試試getResources().getIdentifier(name, defType, defPackage)

Toast.makeText(this, getResources().getIdentifier("r"+resultcode, "string", 
getPackageName()), Toast.LENGTH_LONG).show(); 
+0

完美,謝謝! – 2011-12-29 13:37:23

0

請嘗試以下,它爲我工作。爲你使用parent.getApplicationContext()

String str = getString(R.string.r)+resultCode; 

     Toast.makeText(getApplicationContext(), 
       str, Toast.LENGTH_LONG).show(); 
+1

我認爲getString(R.string.r)+ resultCode不會工作,因爲沒有資源被稱爲「r」 – 2011-12-29 13:03:51

+0

我只給了我的部分代碼,而不是整個的東西。我用它在我的項目中的XML文件。 – 2011-12-29 13:05:24

+0

@ArtWorkAD是我的建議嗎? – 2011-12-29 13:11:15

4

您可以使用getResources().getIdentifier(name, defType, defPackage)來完成。類似這樣的:

// Assuming resultCode is an int, use %s for String 
int id = getResources().getIdentifier(String.format("r%d", resultCode), 
             "string", getPackageName()); 
String result = getString(id); 
+0

我得到一個錯誤「%d無法格式化java.lang.String參數」 – 2011-12-29 13:32:39

+2

啊,我以爲resultCode是一個整數。嘗試使用%s作爲字符串,或者僅執行「r」+ resultCode。 – aspartame 2011-12-29 13:35:02

0

從字符串獲取資源ID的簡單方法。這裏的resourceName是XML文件中包含的可繪製文件夾中的資源ImageView的名稱。我得到「id」可以使用「string」。

int resID = getResources().getIdentifier(resourceName, "id", getPackageName()); 
ImageView im = (ImageView) findViewById(resID); 
Context context = im.getContext(); 
int id = context.getResources().getIdentifier(resourceName, "drawable", 
context.getPackageName()); 
im.setImageResource(id);