2016-07-14 4 views
0

Ich arbeite an einer Android-Quiz-App und ich muss die Farbe der Tasten ändern, wenn eine falsche Antwort ausgewählt ist. Ich habe es eingerichtet, um die Farbe bereits zu ändern, wenn die Schaltfläche, die sie auswählen, falsch ist ODER wenn die Schaltfläche, die sie auswählen, richtig ist. Also, was ist der beste Weg, um auch die Farbe der Taste mit der richtigen Antwort zu ändern, wenn eine falsche Antwort ausgewählt ist? Wenn das Sinn macht. Grundsätzlich muss ich 2 Tasten haben, dass die Farbe geändert wird, wenn Sie die falsche Antwort auswählen. Rot für die falsche Antwort, die sie auswählten und grün für die richtige Antwort, die sie offensichtlich nicht auswählten. Die Antworten werden ebenfalls gemischt und sind nicht sicher, wie man weiß, welcher richtig ist.Quiz App, ändern Sie die Schaltfläche Farbe der falschen und richtigen Antwort auf die falsche Antwort Auswahl, Android

Versuchen Sie auch, Dinge zu buchstabieren und geben Sie mir Beispiele, wie ich nur meine Füße nass in all dies bekommen! Es wird in einem Fragment ausgeführt, und wenn jemand irgendwelche Hinweise darauf hat, wie man irgendwas rationalisiert oder schlechten Code repariert, dann lass es mich wissen, da ich gerade anfange zu lernen und all die Hilfe brauche, die ich bekommen kann.

Hier ist meine onActivityCreated

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    timesUp = (TextView)getActivity().findViewById(R.id.times_up); 
    timesUp.setVisibility(View.INVISIBLE); 

    Bundle c; 
    c = getArguments(); 
    String setCategory = c.getString("category"); 

    QuizHelper db = new QuizHelper(this.getActivity()); // my question bank class 
    quesList = db.getAllQuestions(setCategory); // this will fetch all quetonall questions 

    currentQ = quesList.get(qid); 

    txtQuestion = (TextView)getActivity().findViewById(R.id.txtQuestion); 
    // the textview in which the question will be displayed 

    // the buttons, 
    // the idea is to set the text of the buttons with the options from question bank 
    button1 = (Button)getActivity().findViewById(R.id.button1); 
    button2 = (Button)getActivity().findViewById(R.id.button2); 
    button3 = (Button)getActivity().findViewById(R.id.button3); 
    button4 = (Button)getActivity().findViewById(R.id.button4); 

    //set buttons white 
    button1.setBackgroundColor(Color.WHITE); 
    button2.setBackgroundColor(Color.WHITE); 
    button3.setBackgroundColor(Color.WHITE); 
    button4.setBackgroundColor(Color.WHITE); 

    // the textview in which score will be displayed 
    scored = (TextView)getActivity().findViewById(R.id.score); 
    scored.setText(getResources().getString(R.string.current_score, score)); 

    // the timer 
    times = (TextView)getActivity().findViewById(R.id.timers); 

    // method which will set the things up for our game 
    allAnswers.clear(); 
    setQuestionView(); 
    times.setText(getResources().getString(R.string.start_time)); 

    // Start timer 
    timer.start(); 

    // button click listeners 
    // passing the button text to other method 
    // to check whether the answer is correct or not 
    // same for all three buttons 
    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getAnswer(button1); 
     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getAnswer(button2); 
     } 
    }); 

    button3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getAnswer(button3); 
     } 
    }); 

    button4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getAnswer(button4); 
     } 
    }); 

} 

Hier ist meine getAnswer() (verkürzt etwas)

public void getAnswer(TextView AnswerString) { 

    String option = AnswerString.getText().toString(); 

    //If timer is running stop and restart 
    if(timer != null) { 
     timer.cancel(); // Stop Timer 
     timer.start(); // Start timer 
    } 

    if (currentQ.getANSWER().equals(option)) { 

     // if conditions matches increase the int (score) by 1 
     // and set the text of the score view 
     score++; 
     scored.setText(getResources().getString(R.string.current_score, score)); 
     AnswerString.setBackgroundColor(Color.GREEN); 
    } else { 

     //If answer is wrong change button colors 

     AnswerString.setBackgroundColor(Color.RED); 
     //WrongAnswer.setBackgroundColor(Color.GREEN); 

     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 

       //Load ResultFragment()...      

      } 
     }, 1000); 
     return; 

    } 
    if (qid < 25) { 

     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 

       // if questions are not over then do this 
       currentQ = quesList.get(qid); 
       allAnswers.clear(); 

       //set all buttons white for next question 
       button1.setBackgroundColor(Color.WHITE); 
       button2.setBackgroundColor(Color.WHITE); 
       button3.setBackgroundColor(Color.WHITE); 
       button4.setBackgroundColor(Color.WHITE); 

       setQuestionView(); 

      } 
     }, 1000); 

    } else { 

     // if "game over" (qid>25) do this 
     //Load ResultFragment()... 

} 

und schließlich meine questionView()

private void setQuestionView() { 

    allAnswers.add(currentQ.getOPTA()); 
    allAnswers.add(currentQ.getOPTB()); 
    allAnswers.add(currentQ.getOPTC()); 
    allAnswers.add(currentQ.getOPTD()); 

    Collections.shuffle(allAnswers); 

    txtQuestion.setText(currentQ.getQUESTION()); 
    button1.setText(allAnswers.get(0)); 
    button2.setText(allAnswers.get(1)); 
    button3.setText(allAnswers.get(2)); 
    button4.setText(allAnswers.get(3)); 

    qid++; 
} 

Danke, dass Sie mir geholfen haben!

+0

wie kann man 'getAnswer (Button)', wenn es nur nennen ist 'TextView' in' getAnswer akzeptieren (TextView) ' – rupinderjeet

+0

Weil in' getAnswer (TextView AnswerString) 'ich' String Option = AnswerString.getText() verwende.toString(); 'Um es in eine Zeichenfolge zu ändern, kann ich' option' verwenden, um 'currentQ.getANSWER() zu vergleichen. equals (Option)' – Xenocide122

Antwort

1

EDIT

Sie können Schaltfläche Text mit bekommen:

// for currentQ.getANSWER().equals(option) 
String option = selectedButton.getText(); 

VOR EDIT

Anruf von dieser getAnswer(Button selectedButton) falsche Antwort Feld

Get Antwort

//match DB answer to selected answer, turn it green if it is correct 
if(button1.getText().equals(answerText)){ 
    button1.setBackgroundColor(Color.GREEN); 
} else if(button2.getText().equals(answerText)){ 
    button2.setBackgroundColor(Color.GREEN); 
} else if(button3.getText().equals(answerText)){ 
    button3.setBackgroundColor(Color.GREEN); 
} else if(button4.getText().equals(answerText)){ 
    button4.setBackgroundColor(Color.GREEN); 
} 

Option 2:

// match DB answer to selected answer, turn it green if it is correct 
ArrayList buttonList = new ArrayList(); 
buttonList.add(button1); 
buttonList.add(button2); 
buttonList.add(button3); 
buttonList.add(button4); 

for(Button button : buttonList){ 
    if(button.getText().equals(answerText)){ 
     button.setBackgroundColor(Color.GREEN); 
     break; 
    } 
} 

Hinweis: aus Ihrer Datenbank und mit getText() von allen Tasten

// because you found out that selected answer/button was wrong 
selectedButton.setBackgroundColor(Color.RED); 

// take real answer from DB and store in String, probably you've already done this 
String answerText = "take-answer-from-database"; 

Option 1 entsprechen Wenn Ihr getAnswer(Button) ist in einer anderen Klasse, mach einfach deine Knöpfe global und public, dann greifen sie mit ihrem Klassenobjekt

Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen

+1

Das hat super funktioniert! Ich habe Option 1 benutzt und alles unter meine 'AnswerString.setBackgroundColor (Color.RED);' gestellt und die richtige Antwort mit 'String answerText = currentQ.getANSWER();' gezogen, falls jemand anders es wissen möchte! – Xenocide122