2011-12-29 103 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);