2017-01-16 1 views
1

Ich baue eine Anwendung, die dem Benutzer mehrere Fragen stellt. Jede Frage hat 4 Antworten (Radiobuttons), die der Benutzer wählen muss. Ich möchte eine Aktivität erstellen, die mit den Fragen und Antworten aktualisiert wird.Wie aktualisiert man den Text von Radio-Buttons mit strings.xml

Alle Fragen und Antworten werden in strings.xml geschrieben:

<!-- Q1 --> 
    <string name="Q1">Q1</string> 
    <string name="Q1A1">answer 1</string> 
    <string name="Q1A2">answer 2</string> 
    <string name="Q1A3">answer 3</string> 
    <string name="Q1A4">answer 4</string> 

    <!-- Q2 --> 
    <string name="Q2">Q2</string> 
    <string name="Q2A1">answer 1</string> 
    <string name="Q2A2">answer 2</string> 
    <string name="Q2A3">answer 3</string> 
    <string name="Q2A4">answer 4</string> 

....

(ich mehr Fragen in Zukunft über diese Datei und nicht in schwer in der Lage sein wollen Coded hinzufügen Art und Weise)

Wenn der Benutzer auf die nächste Frage zu bekommen, wählt ich die Fragen und Antworten über dynamische Art und Weise aktualisiert werden soll:

private void updateQuestion(int currentQuestion) { 

     // Update Questions 
     TextView textView = (TextView)findViewById(R.id.QuestionLabel); 
     textView.setText(getResources().getString(R.string.Q1)); // ??? how to get string Q#currentQuestion 

     // Update Answares 
     RadioGroup radioGroup = (RadioGroup)findViewById(R.id.rgQuestions); 
     for (int i = 0; i < radioGroup .getChildCount(); i++) 
     { 
      // ??? how to get string of Q'currentQuestion'A'i' ???? 
      ((RadioButton) radioGroup.getChildAt(i)).setText(getResources().getString(R.string.Q1A1)); 
     } 
    } 

Aber wie kann ich den Text der Radiobuttons (und textView) über strings.xml einstellen, indem Sie den richtigen String-Wert wählen? (Ich möchte die StringRes mit currentQuestion und i Iterator erstellen). Ist es möglich?

Antwort

0

Versuchen zu verwenden getIdentifier() kann so etwas wie dieses:

private void updateQuestion(int currentQuestion) { 
    // Update Questions 
    String questionString = "Q" + currentQuestion; 
    TextView textView = (TextView)findViewById(R.id.QuestionLabel); 
    textView.setText(getString(getResources().getIdentifier(questionString, "string", this.getPackageName()))); 

    // Update Answers 
    String answerString; 
    RadioGroup radioGroup = (RadioGroup)findViewById(R.id.rgQuestions); 
    for (int i = 0; i < radioGroup .getChildCount(); i++) 
    { 
     answerString = questionString + "A" + i; 
     ((RadioButton) radioGroup.getChildAt(i)).setText(getString(getResources(). 
       getIdentifier(answerString, "string", this.getPackageName()))); 
    } 
} 

it :)

0

können Sie String Array verwenden:

<string-array name="question_array"> 
     <item>Q1</item> 
     <item>Q2</item> 
</string-array> 

<string-array name="question_1_answer"> 
     <item>answer 1</item> 
     <item>answer 2</item> 
     <item>answer 3</item> 
     <item>answer 4</item> 
</string-array> 

<string-array name="question_2_answer"> 
     <item>answer 1</item> 
     <item>answer 2</item> 
     <item>answer 3</item> 
     <item>answer 4</item> 
</string-array> 

und greifen Sie über:

String[] questions = getResources().getStringArray(R.array.question_array); 
//Call as per your convenience 
updateQuestion(1, R.array.question_1_answer); 
//updateQuestion(2, R.array.question_1_answer); 

In Ihrem Beispiel:

private void updateQuestion(int currentQuestion, int answerResId) { 
      TextView textView = (TextView)findViewById(R.id.QuestionLabel); 
      textView.setText(questions[currentQuestion]);  

      RadioGroup radioGroup = (RadioGroup)findViewById(R.id.rgQuestions); 
      String[] answers = getResources().getStringArray(answerResId); 
      for (int i = 0; i < radioGroup .getChildCount(); i++)   { 
       ((RadioButton) radioGroup.getChildAt(i)).setText(answers[i]); 
      } 

     } 

Also im Grunde obige Lösung ist nur Idee zu Ihrer Frage Ich hoffe, es wird dir helfen.

+0

in Ihrer Lösung helfen Hoffnung, ich brauche die answerResId manualy einzustellen, wenn 'updateQuestion' aufrufen. Ich möchte R.array_question_'i'_answer –

+0

wählen Nach meinem Denken müssen Sie Array von solchen Ressourcen-IDs pflegen und verwenden es nach Ihren Anforderungen. –

Verwandte Themen