如何通过在名称中添加int来从strings.xml获取字符串

时间:2012-07-22 02:51:29

标签: java android settext r.java-file

private int info = 1;

public void nextStep(View view)
{    
    TextView textInfo = (TextView) findViewById(R.id.textInfo);
    textInfo.setText(R.string.info1);
    info++;
}

单击一个按钮时,将调用方法nextStep。每次点击一个按钮,我都会显示不同的信息,第一次是info1字符串,下次是来自info2的{​​{1}}字符串等。我想做那样的事情:

strings.xml

当然,这是不可能的。我该怎么办?我真的不想写一个大的if / else或switch语句。感谢。

2 个答案:

答案 0 :(得分:3)

  

当然,这是不可能的。

实际上是。您可以使用getIdentifier执行此操作:

private int info = 1;
public void nextStep(View view)
{    
    TextView textInfo = (TextView) findViewById(R.id.textInfo);
    int myStrId = textInfo.getContext().getResources().getIdentifier("info"+info, "string", textInfo.getContext().getPackageName());
    textInfo.setText(myStrId);
    info++;
}
如果您不知道确切的名称,

getIdentifer()是一种获取存储在R中的资源ID的方法。虽然它不是世界上最有效的方法,但在无法引用R(例如您的情况)的情况下,它就足够了。

该方法返回与R相同的ID;也就是说,getIdentifier("info1", "id", ...);R.id.info1相同,因为R只是它的编译版本。如果您不确定是否存在ID(例如来自外部库),但无论如何都需要引用它,此方法也适用。

答案 1 :(得分:1)

使用String数组或更好的List<String> ArrayList<String>,并使用XML中的字符串填充它。然后,您可以使用get(int index)方法在列表中获取第i个字符串。

如果您正在使用JAXB来解组XML,您可以将其设置为为您创建列表而不必担心。