如何通过名称引用从XML获取String?

时间:2012-04-05 18:17:11

标签: android

我尝试做这样的事情

public class CytatCore {

    public static void cytatCore(int number, TextView tv) {

       tv.setText(R.string.text+number);
    }
}

我在xml中有很多名为eg" text1"," text2"只有最后一个值正在改变。我试图以几种方式做到这一点,但我仍然在代码中出错。

4 个答案:

答案 0 :(得分:3)

我认为以下代码适合您

switch(number) {
    case 1 : tv.setText(R.string.text1);
    case 2 : tv.setText(R.string.text2);
}

使用此类型代码时,也将text1,text2放在R.string中;开关盒也处理得更快。

答案 1 :(得分:2)

我对你要完成的事情感到有点困惑,因为你的问题写得不清楚,但我会在黑暗中捅一下并假设你的问题是

  

如何将数字附加到XML格式的字符串末尾?

编辑:我的假设是错误的,看来你的问题是

  

如何通过名称引用从XML获取字符串?

使用getIdentifier()的{​​{1}}方法将按名称查找ID ...但是如果它经常使用,则会被警告不建议使用此操作,因为它很慢。

Context

答案 2 :(得分:1)

您拥有的另一个选择是获取Resources对象的引用并使用方法getIdentifier()。如果您参加活动,那么您可以这样做:

public void cytatCore(int number, TextView tv) {    
    int id = getResources().getIdentifier("text" + 1, "string", this.getPackageName());
    t.setText(id);
}

答案 3 :(得分:0)

尝试将名称放在数组中:

...
private String[] ids = new String[N];
for (int i = 0; i < N; i++) {
    ids[i] = context.getString(R.string.resource_name) + i;
}

然后:

...
public static void cytatCore(int i, TextView tv) {
    tv.setText(ids[i]);
}

或简单地说:

    ...
public static void cytatCore(int i, TextView tv) {
    tv.setText(context.getString(R.string.resource_name) + i);
}