2014-01-24 54 views
1

只是尝试创建我的代码更紧凑。 我有一组字符串:使用变量来呼叫资源

<string name = "A1">Some text</string> 
<string name = "A2">More text</string> 
... 
<string name = "Z1">Different text</string> 

所有信件有一个值从1到4,我需要根据条件的TextView出手吧。保存在数组UAN []

if (uan[0] > 10 && uan[0] < 20) { 
    textView.setText(getString(R.string.A1)); 
} else if (uan[0]>20 && uan[0]<40) { 
    textView.setText(getString(R.string.A1)); 
} else if ... 

所有的条件我并不想创建一个长隆集的条件,并尝试建立循环。存储在其他阵列中的所有类型的条件conditionsType []

String varAppend; 
for (int i=0; i>uan.lenght; i++) { 
if (uan[i] >10 && uan [i] <20) { 
    varAppend = "R.string."+varAppend[i]+uan[i]; /*here logical error, but I think to solve it */ 
    textView.setText(getString(varAppend)); /*Code doesn't work*/ 
} 
} 

,但我不”知道如何从资源,通过变量得到的字符串。

回答

0

varAppend必须是

textView.setText(getString(varAppend)) 

字符串android.content.res.Resources.getString(INT ID)抛出NotFoundException

公共字符串的getString(INT ID)一个int

在API级别1中添加返回与 particulul关联的字符串值ar资源ID。它将被删除任何样式文本 信息。

参数:

ID所需资源标识符,如由AAPT工具生成的。此整数对包,类型和资源条目进行编码。所述 值0是无效的标识符

尝试使用

getResources()则getIdentifier()

但文档说:该函数的使用是不鼓励。通过标识符而不是按名称检索资源要高效得多。

1

也许你应该尝试使用字符串数组作为一种资源,而不是:

<array name="sample"> 
    <item>A1</item> 
    <item>A2</item> 
    <item>A3</item> 
    <item>A4</item> 
    ... 
    <item>Z4</item> 
</array> 

后来才使用下面的代码可以访问阵列

String[] array = getResources().getStringArray(R.array.sample);