0

我正在尝试做这样的事情

public class CytatCore {

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

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

我在 xml 中有很多名为“text1”、“text2”等的字符串。只有最后一个值在变化。我尝试以几种方式做到这一点,但我仍然在代码中遇到错误。

4

4 回答 4

3

我认为followin代码会为你工作

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

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

于 2012-04-05T18:23:38.190 回答
2

我对您要完成的工作感到有些困惑,因为您的问题没有写清楚,但是我会在黑暗中尝试一下,并假设您的问题是

如何在 XML 中的字符串末尾附加一个数字?

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

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

使用getIdentifier()a 的方法Context将按名称查找 ID...但请注意,如果使用非常频繁,则不建议使用此操作,因为它很慢。

public class CytatCore {

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

       int textId = context.getResources().getIdentifier("text" + number, "string", context.getPackageName());
       tv.setText(textId);
    }
}
于 2012-04-05T18:25:48.713 回答
1

另一个选择是获取对Resources对象的引用并使用方法getIdentifier()。如果您正在进行一项活动,那么您可以执行以下操作:

public void cytatCore(int number, TextView tv) {    
    int id = getResources().getIdentifier("text" + 1, "string", this.getPackageName());
    t.setText(id);
}
于 2012-04-05T18:42:01.977 回答
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);
}
于 2012-04-05T18:22:54.597 回答