【问题标题】:How to change color of multiple choice to show correct answer如何更改多项选择的颜色以显示正确答案
【发布时间】:2012-07-19 18:08:01
【问题描述】:

我正在做一个有 4 个选项的多项选择应用程序。如果用户(同时)按下了错误的答案,如何提示用户正确答案。这里是代码示例。

        //Question/Answer options listener
        optionOne.setOnClickListener(this);     //On First Option selection
        optionTwo.setOnClickListener(this);     //On Second Option selection
        optionThree.setOnClickListener(this);   //On Third Option selection
        optionFour.setOnClickListener(this);    //On Forth Option selection

        skip.setOnClickListener(this);          //On Question Skip      
        pause.setOnClickListener(this);         //On Game Pause
        end.setOnClickListener(this);           //On Game End

    }

    public void onClick(View v) {
        if(v.getId() == optionOne.getId()){
            onOptionSelected(optionOne.getText().toString());
        }else if(v.getId() == optionTwo.getId()){
            onOptionSelected(optionTwo.getText().toString());
        }else if(v.getId() == optionThree.getId()){
            onOptionSelected(optionThree.getText().toString());
        }else if(v.getId() == optionFour.getId()){
            onOptionSelected(optionFour.getText().toString());
        }else if(v.getId() == pause.getId()){   //True when Game is Paused 

    //When an option of a question is selected
    private void onOptionSelected(String option){
        if(!isGamePaused && !isGameEnded) { //true when game is being played
            ATriviaQuestion tTQuestion = myListOfTriviaQuestions.get(currentQuestionNumber);
            if(option.equals(tTQuestion.GetOptions().get(tTQuestion.GetAnswer() - 1))) {
                correct += 1;
                remainingTime = mySecondsPassed;
                totalPoints += remainingTime * pointsPerRemainingSecond; 
                totalPoints += pointsPerCorrectAnswer;
            }
            else{
                incorrect += 1;
                totalPoints -= pointsPerWrongAnswer;
            }

我需要在这部分插入一些东西来显示正确的答案。

else{
    incorrect += 1;
    totalPoints -= pointsPerWrongAnswer;
    selectedOptionTxt.setBackgroundColor(Color.RED); 

Here is my .plist
<question>
<key>Question</key>
<string>What is the ....</string>
<key>Options</key>
<array>
<string>option 1</string>
<string>option 2</string>
<string>option 3</string>
<string>option 4</string>
</array>
<key>Answer</key>
<integer>2</integer>
 </question>

这是另一个代码

public ATriviaQuestion(){
    isThisQuestionAsked = false;
    answer = -1;
    answered = "";
}

public String GetQuestion()
{ return this.question; }

public void SetQuestion(String _question)
{ this.question=_question; }

public ArrayList<String> GetOptions()
{ return this.options; }

public void SetOptions(ArrayList<String> _options)
{ this.options = _options; }

public int GetAnswer()
{ return this.answer; }

public void SetAnswer(int _answer)
{ this.answer = _answer; }

【问题讨论】:

  • 请显示您如何定义正确答案的所有代码以及在何种视图类型中的所有答案。
  • 您是否使用选项菜单来选择答案?如果是这样,我建议您在布局中使用视图而不是那样。
  • @Anil。我只是在应用程序提供的 .plist 中输入问题、选择和正确答案。当我的答案正确时,分数会更新。我想要的是通过将其颜色更改为绿色并将其余颜色更改为红色来突出显示正确答案,以便用户知道他是否选择了正确答案。
  • @蒂姆。我只是下载它及其完整的应用程序,唯一缺少的是我想在回答问题后更改选项的颜色以显示正确和错误的答案。谢谢!

标签: android android-layout android-emulator


【解决方案1】:

我能看到的最简单的方法是更改​​您的 onOptionSelected 方法以将 TextView 作为参数而不仅仅是字符串,您仍然可以在方法中以与您相同的方式拉出字符串现在在它之外。您将获得更改背景颜色所需的参考。

//When an option of a question is selected
private void onOptionSelected(TextView selectedOptionTxt){
String option = selectedOptionTxt.getText().toString();

if(!isGamePaused && !isGameEnded) { //true when game is being played
    ATriviaQuestion tTQuestion = myListOfTriviaQuestions.get(currentQuestionNumber);
    if(option.equals(tTQuestion.GetOptions().get(tTQuestion.GetAnswer() - 1))) {
        correct += 1;
        remainingTime = mySecondsPassed;
        totalPoints += remainingTime * pointsPerRemainingSecond; 
        totalPoints += pointsPerCorrectAnswer;  
        selectedOptionTxt.setBackgroundColor(Color.GREEN);
    }
    else{
        incorrect += 1;
        totalPoints -= pointsPerWrongAnswer;
        selectedOptionTxt.setBackgroundColor(Color.RED);

然后更改调用此方法的位置以传递整个 TextView 而不仅仅是字符串。像这样:

onOptionSelected(optionOne);

请注意,您需要为四个中的每一个都执行此操作,而不仅仅是我在这里展示的那个。

【讨论】:

  • 我有四个错误说“onOptionSelected(TextView) 上的方法不适用于参数 (String)” public void onClick(View v) { if(v.getId() == optionOne. getId()){ onOptionSelected(optionOne.getText().toString()); }else if(v.getId() == optionTwo.getId()){ onOptionSelected(optionTwo.getText().toString()); }else if(v.getId() == optionThree.getId()){ onOptionSelected(optionThree.getText().toString()); }else if(v.getId() == optionFour.getId()){ onOptionSelected(optionFour.getText().toString()); }else if(v.getId() == pause.getId()){
  • 您需要删除所有对onOptionSelected() 的方法调用中的.getText().toString() 部分,正如我在答案的第二部分中所述=)。此外,如果您有代码要发布您应该编辑我们的问题以发布它以便可以正确格式化,那么 cmets 中的代码是眼睛的杀手!
  • 它工作正常。 :) 但是在回答后自动提出新问题时,绿色/红色不会消失。在 4 个问题之后,所有选项都是绿色或红色。我希望在下一个问题显示时彩色背景消失,并且当我选择错误(红色)答案时是否可以同时显示正确(绿色)答案,然后在下一个问题出现时两者都消失。 :)
  • 所以将setBackgroundColor(Color.WHITE); 用于您提出新问题的代码区域中的所有 TextView。
【解决方案2】:

试试这个:

        if(v.getId() == optionOne.getId()){
            onOptionSelected(optionOne.getText().toString(),v);
        }else if(v.getId() == optionTwo.getId()){
            onOptionSelected(optionTwo.getText().toString(),v);
        }else if(v.getId() == optionThree.getId()){
            onOptionSelected(optionThree.getText().toString(),v);
        }else if(v.getId() == optionFour.getId()){
            onOptionSelected(optionFour.getText().toString(),v);
        }else if(v.getId() == pause.getId())}

    private void onOptionSelected(String option,View v){
        if(!isGamePaused && !isGameEnded) { //true when game is being played
            ATriviaQuestion tTQuestion = myListOfTriviaQuestions.get(currentQuestionNumber);
            if(option.equals(tTQuestion.GetOptions().get(tTQuestion.GetAnswer() - 1))) {
                correct += 1;
                remainingTime = mySecondsPassed;
                totalPoints += remainingTime * pointsPerRemainingSecond; 
                totalPoints += pointsPerCorrectAnswer;  
                v.setBackgroundResource(R.id.greenBackground);
            }
            else{
                incorrect += 1;
                totalPoints -= pointsPerWrongAnswer;
                v.setBackgroundResource(R.id.redBackground);

            }

在哪里 R.id.greenBackground - 你想在正确答案后面显示的可绘制对象的 ID R.id.redBackground - 您想在错误答案后面显示的可绘制对象的 ID

【讨论】:

  • R.id.greenBackground 导致错误“无法解析或不是字段。”
  • 和蒂姆一样。您的代码正在运行:)。但是在回答后自动提出新问题时,绿色/红色不会消失。在 4 个问题之后,所有选项都是绿色或红色。我希望在下一个问题显示时彩色背景消失,并且当我选择错误(红色)答案时是否可以同时显示正确(绿色)答案,然后在下一个问题出现时两者都消失。跨度>
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 2018-08-27
  • 2021-04-21
  • 2013-07-15
  • 2017-04-05
相关资源
最近更新 更多