2017-12-19 7 views
0

私は文字列リソース内の質問と答えを含むクイズアプリを構築しています。私は、質問と回答の両方を保持するためのQAクラスを作成しているリソース参照intをプログラムで作成する

<string name="ans1">Blue</string> 
<string name="ans2">Moo</string> 

:答えはまた、質問と同じ番号に対応する文字列です

<string name="ques1">What color is the sky?</string> 
<string name="ques2">What sound does a cow make?</string> 

:彼らはそうのような数字でフォーマットされています、および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を上記の方法のさらに別の繰り返しを追加することなく、いつでも使用できます。私は明らかにこのようにint型に文字列をキャストすることはできませんが、私はしません参照「ビルダー」を実装する方法がある場合、私は疑問に思って

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); 
    } 

:私は何をしたい、基本的にこれです同じ名前でインクリメントされた別の文字列を読み取るためには、多くの行のコードを繰り返す必要があります。

質問用と回答用のarray.xmlを作成して、各配列内の位置が一致していることを確認することもできます。これは私が考えるのが一番簡単ですが、私の例のようなコードを通して文字列値への参照を作成することが可能かどうか疑問に思っていますか?

答えて

2

あなたは、そのリソース名で、質問または回答文字列を取得するには、このメソッドを使用することができます。

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); 
    } 
+0

ありがとう、これはまさに私が探していた答えでした! – Blaasd

関連する問題