I am working on an android quiz. I wanted to add a button. when I click on it, change the image or color and hold the button for a while to check the answer, and if the answer is correct, then it shows green and wrong red.
I implemented in a color change on a button similar to this one at the end, but I donโt understand how to implement a handler for the delay: -
public class QuestionActivity extends Activity implements OnClickListener{ private Question currentQ; private GamePlay currentGame; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.question); processSession(); } private void processSession(){ /** * Configure current game and get question */ currentGame = ((CYKApplication)getApplication()).getCurrentGame(); currentQ = currentGame.getNextQuestion(); Button nextBtn1 = (Button) findViewById(R.id.answer1); nextBtn1.setOnClickListener(this); Button nextBtn2 = (Button) findViewById(R.id.answer2); nextBtn2.setOnClickListener(this); Button nextBtn3 = (Button) findViewById(R.id.answer3); nextBtn3.setOnClickListener(this); Button nextBtn4 = (Button) findViewById(R.id.answer4); nextBtn4.setOnClickListener(this); Button nextBtn5 = (Button) findViewById(R.id.answer5); nextBtn5.setOnClickListener(this); /** * Update the question and answer options.. */ setQuestions(); } /** * Method to set the text for the question and answers from the current games * current question */ private void setQuestions() { //set the question text from current question String question = Utility.capitalise(currentQ.getQuestion()); TextView qText = (TextView) findViewById(R.id.question); qText.setText(question); //set the available options List<String> answers = currentQ.getQuestionOptions(); TextView option1 = (TextView) findViewById(R.id.answer1); option1.setText(Utility.capitalise(answers.get(0))); TextView option2 = (TextView) findViewById(R.id.answer2); option2.setText(Utility.capitalise(answers.get(1))); TextView option3 = (TextView) findViewById(R.id.answer3); option3.setText(Utility.capitalise(answers.get(2))); TextView option4 = (TextView) findViewById(R.id.answer4); option4.setText(Utility.capitalise(answers.get(3))); int score = currentGame.getScore(); String scr = String.valueOf(score); TextView score1 = (TextView) findViewById(R.id.score); score1.setText(scr); try{ new CountDownTimer(20000, 1000) { public void onTick(long millisUntilFinished) { TextView timers = (TextView) findViewById(R.id.timers); timers.setText("" + millisUntilFinished / 1000); } public void onFinish() { currentGame.decrementScore(); processSession(); } }.start(); } catch(Exception ex) { throw new RuntimeException(ex); } } @Override public void onClick(View arg0) { //Log.d("Questions", "Moving to next question"); if(arg0.getId()==R.id.answer5) { new AlertDialog.Builder(this).setMessage("Are you sure?").setCancelable(true).setPositiveButton("Yes",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { finish(); } }).setNegativeButton("No", null).show(); } else { if(!checkAnswer(arg0)) return; /** * check if end of game */ if (currentGame.isGameOver()){ //Log.d("Questions", "End of game! lets add up the scores.."); //Log.d("Questions", "Questions Correct: " + currentGame.getRight()); //Log.d("Questions", "Questions Wrong: " + currentGame.getWrong()); Intent i = new Intent(this, EndgameActivity.class); startActivity(i); finish(); } else{ Intent i = new Intent(this, QuestionActivity.class); startActivity(i); finish(); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK : return true; } return super.onKeyDown(keyCode, event); } /** * Check if a checkbox has been selected, and if it * has then check if its correct and update gamescore */ private boolean checkAnswer(View v) { try { final Button b=(Button) v; final String answer = b.getText().toString(); counterTimer.cancel(); b.setBackgroundResource(R.drawable.ans); b.setEnabled(false); //Log.d("Questions", "Valid Checkbox selection made - check if correct"); handler.postDelayed(new Runnable() { @Override public void run() { if( (currentQ.getAnswer().equalsIgnoreCase(answer))) { b.setBackgroundResource(R.drawable.ansgreen); //Log.d("Questions", "Correct Answer!"); currentGame.incrementScore(); } else{ b.setBackgroundResource(R.drawable.ansred); //Log.d("Questions", "Incorrect Answer!"); currentGame.decrementScore1(); } } }, 10000000); } catch (Exception e) { e.printStackTrace(); } return true; }
Any answer is noticeable.
thanks in advance
source share