从string.xml中选择一个随机文本

时间:2017-08-28 11:59:30

标签: java android android-resources

我有一个string.xml文件,其中包含text_1 ... text_100 现在我想选择这些的随机文本并将其显示在TextView上。 我试着用

String text = "text_";
int randomNum = rand.nextInt((100 + 1) + 1;
text = text + String.valueOf(randomNum);
txt.setText(getString(R.string.text);

所以现在它不起作用,因为字符串文件中没有“text”...

也许有些建议?

2 个答案:

答案 0 :(得分:0)

你可以使用它,但这是不好的做法:

public static int getResId(String resName, Class<?> c) {
    try {
        Field idField = c.getDeclaredField(resName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

在你的情况下:

getResId(text, String.class);

更好的选择是在xml中创建字符串数组:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

然后:

String[] planets = res.getStringArray(R.array.planets_array);
int randomNum = rand.nextInt(planets.size() - 1);
txt.setText(planets[randomNum]);

答案 1 :(得分:0)

你不会想出像这样的int id。由于您知道资源名称,因此请使用Resources.classgetIdentifier(resIdName, resTypeName, packageName)

的此方法

由于资源属于Context,您可以:

String text = "text_";
 int randomNum = rand.nextInt((100 + 1) + 1; 
text = text + String.valueOf(randomNum);
int textId = getResources().getIdentifier(text, "string", getPackageName());
txt.setText(getString(textId));

您的字符串资源中有该项的资源ID。

It was answered here