使用变量来调用资源

时间:2014-01-24 18:14:55

标签: java android

尝试创建更紧凑的代码。 我有一组字符串:

<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 ...

我不想创建LONG-LONG条件并尝试创建循环。存储在其他数组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*/
 }
}

但我不知道如何通过变量从资源中获取字符串。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

是的,你可以(虽然不鼓励它不起作用):)

http://steven.bitsetters.com/2007/11/27/accessing-android-resources-by-name-at-runtime/

只需按名称获取ID,然后通过它获取。

答案 2 :(得分:0)

varAppend必须是

中的int
textView.setText(getString(varAppend))
  

String android.content.res.Resources.getString(int id)抛出NotFoundException

     

public String getString(int id)

     

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

     

参数:

     

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

尝试使用

  

<强> getResources()。则getIdentifier()

但是文档说:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。