R
RobNeck
Ambitioniertes Mitglied
- 3
Nabend,
ich versuche mich gerade daran, meiner QuizApp eine Zeitbegrenzung für jede Frage zu verpassen. Dazu nutze ich einen CountDownTimer.
Die Logik ist aktuell folgende:
Frage beantwortet -> nächste Frage, Timer neustarten
ODER
Zeit abgelaufen -> nächste Frage, Timer neustarten
letzteres klappt wunderbar, ersteres leider noch gar nicht. Ich kann zwar einen neuen Timer starten, allerdings laufen dann zwei Timer gleichzeitig, was im TextView ziemlich bescheiden aussieht und letztlich zu einem Crash führt. Mit cancel() nach einen Click auf "Next" führe ich leider ebenfalls jedes mal einen Crash herbei. Jemand ne Idee, wo der Fehler liegt?
ich versuche mich gerade daran, meiner QuizApp eine Zeitbegrenzung für jede Frage zu verpassen. Dazu nutze ich einen CountDownTimer.
Die Logik ist aktuell folgende:
Frage beantwortet -> nächste Frage, Timer neustarten
ODER
Zeit abgelaufen -> nächste Frage, Timer neustarten
letzteres klappt wunderbar, ersteres leider noch gar nicht. Ich kann zwar einen neuen Timer starten, allerdings laufen dann zwei Timer gleichzeitig, was im TextView ziemlich bescheiden aussieht und letztlich zu einem Crash führt. Mit cancel() nach einen Click auf "Next" führe ich leider ebenfalls jedes mal einen Crash herbei. Jemand ne Idee, wo der Fehler liegt?
Code:
package com.jensjensen.quiz;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class QuizActivity extends Activity {
List<Question> quesList;
int score = 0;
int qid = 0;
int tick = 0;
Question currentQ;
TextView questionTextView;
RadioButton btnOptionA, btnOptionB, btnOptionC;
Button btnNext;
TextView time;
CountDownTimer countDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
DbHelper db = new DbHelper(this);
quesList = db.getAllQuestions();
currentQ = quesList.get(qid);
questionTextView = (TextView)findViewById(R.id.question);
btnOptionA = (RadioButton)findViewById(R.id.optionA);
btnOptionB = (RadioButton)findViewById(R.id.optionB);
btnOptionC = (RadioButton)findViewById(R.id.optionC);
btnNext = (Button)findViewById(R.id.nextButton);
final TextView time = (TextView)findViewById(R.id.time);
setQuestionView();
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioGroup grp = (RadioGroup)findViewById(R.id.radioGroup1);
RadioButton answer = (RadioButton)findViewById(grp.getCheckedRadioButtonId());
if(currentQ.getAnswer().equals(answer.getText()))
{
score++;
}
if(qid<5){
currentQ=quesList.get(qid);
setQuestionView();
}else{
Intent intent = new Intent(QuizActivity.this, ResultActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); //Your score
intent.putExtras(b); //Put your score to your next Intent
startActivity(intent);
finish();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.quiz, menu);
return true;
}
private void setQuestionView()
{
questionTextView.setText(currentQ.getQuestion());
btnOptionA.setText(currentQ.getOptionA());
btnOptionB.setText(currentQ.getOptionB());
btnOptionC.setText(currentQ.getOptionC());
qid++;
new CountDownTimer(8000, 1000) {
public void onTick(long millisUntilFinished) {
mTime.setText("Time: " + millisUntilFinished / 1000);
}
public void onFinish() {
btnNext.performClick();
}
}.start();
}
}