我正在构建一个测验应用程序,其中包含字符串资源中的问题以及答案。它们的格式如下:
<string name="ques1">What color is the sky?</string>
<string name="ques2">What sound does a cow make?</string>
答案也是与问题编号相同的字符串:
<string name="ans1">Blue</string>
<string name="ans2">Moo</string>
我创建了一个QA类来保存问题和答案,以及用户对EditText的响应。在我的应用程序的“加载”中,通过从字符串资源中读取来创建和填充这些类。
我可以通过编程方式输入这些没有问题,这是很多复制粘贴,但它将完成工作:
QA.setQuestion(getString(R.string.ques1));
QA.setAnswer(getString(R.string.ans1));
quizList.add(QA);
QA.setQuestion(getString(R.string.ques2));
QA.setAnswer(getString(R.string.ans2));
quizList.add(QA);
etc...
问题是我希望能够随时添加xml的问题和答案,而不必再添加上述方法的重复。我想要做的基本上是这样的:
String refBase = "R.string."
String ans = "ans";
String ques = "ques";
int numOfQues = 25; //only change when questions are added or removed
for (int i = 0; i < numOfQues; i++)
{
String referenceQ = refBase + ques + i;
String referenceA = refBase + ans + i;
QA.setQuestion(getString(referenceQ));
QA.setAnswer(getString(referenceA));
quizList.add(QA);
}
我显然无法将字符串强制转换为int,但我想知道是否有办法实现引用“构建器”,我不必重复多行代码只是为了读取另一个具有相同名称的字符串但增加了数字。
我知道我也可以创建一个array.xml,其中一个用于问题,一个用于答案,确保它们在每个数组中的位置对应。这是我认为最容易的,但我想我想知道是否可以像我的例子一样通过代码创建对字符串值的引用?
您可以使用此方法通过其资源名称获取问题或答案String:
String getQAString(boolean isQuestion, int index) {
String prefix = isQuestion? "ques" : "ans";
int resId = getResources().getIdentifier(prefix + index, "string", getPackageName());
return resId != 0? getString(resId) : "";
}
添加问题和答案的循环(假设它们从1开始到25结束):
int numOfQues = 25;
for (int i = 1; i <= numOfQues; i++) {
String referenceQ = getQAString(true, i);
String referenceA = getQAString(false, i);
QA.setQuestion(referenceQ);
QA.setAnswer(referenceA);
quizList.add(QA);
}