首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Timer类未重新启动timer - Android

Timer类未重新启动timer - Android
EN

Stack Overflow用户
提问于 2013-01-11 01:09:14
回答 1查看 344关注 0票数 1

我有一个10个问题的小游戏,每个问题有10秒的计时器。当计时器用完时,问题将切换到下一个问题,但计时器永远不会重新启动。它将保持为0。我似乎找不到在显示下一个问题时阻止计时器重新启动的代码中的哪一个。

另外,代码结构建议也很受欢迎!

提前谢谢你。

QuestionView.java

代码语言:javascript
复制
public class QuestionView extends Activity  {

    int correctAnswers = 0;
    int wrongAnswers = 0;
    int answer = 0;
    int i = 0;

    long score = 0;

    long startTime = 10000;
    long interval = 1000;
    long timeElapsed;

    boolean timerHasStarted = false;

    String category;

    Button answer1, answer2, answer3, answer4;
    TextView question, timer, timeElapsedView;

    ArrayList<Question> queries;
    Timer cdTimer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.questionviewmain);

        answer1 = (Button)findViewById(R.id.answer1);
        answer2 = (Button)findViewById(R.id.answer2);
        answer3 = (Button)findViewById(R.id.answer3);
        answer4 = (Button)findViewById(R.id.answer4);

        question = (TextView)findViewById(R.id.question);

        category = getIntent().getStringExtra("category");
        queries = getIntent().getParcelableArrayListExtra("queries");

        timer = (TextView)findViewById(R.id.timer);
        timeElapsedView = (TextView)findViewById(R.id.timeElapsedView);

        cdTimer = new Timer(startTime, interval);

              loadQuestion();
    }

    public void loadQuestion() {
        if(i == 9) {
            endQuiz();
        } else {
            if(!timerHasStarted) {
                cdTimer.start();
                timerHasStarted = true;
            } else {
                cdTimer.cancel();
                timerHasStarted = false;
            }

            answer = queries.get(i).getCorrectAnswer();
            question.setText(queries.get(i).getQuery());

            answer1.setText(queries.get(i).getA1());
            answer2.setText(queries.get(i).getA2());
            answer3.setText(queries.get(i).getA3());
            answer4.setText(queries.get(i).getA4());

            answer1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(0);
                    if(answer == 0) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });

            //Same code for button 1 for buttons 2 through 4.
        } 
    }

    public void nextQuestion() {
        score = score + ((startTime / 100) - timeElapsed);
        i++;
        loadQuestion();
    }

    public class Timer extends CountDownTimer {

        public Timer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            if(i == 9) {
                cdTimer.cancel();
            } else {
                wrongAnswers++;
                nextQuestion();
            }
        }

        @Override
        public void onTick(long millisUntilFinished) {
            timer.setText("Time remaining: " + (millisUntilFinished / 100));
            timeElapsed = 100 - ((startTime - millisUntilFinished) / 100);
            timeElapsedView.setText("Points remaining: " + timeElapsed);
        }
    }

    public void endQuiz() {
        Intent intent = new Intent(QuestionView.this, Results.class);
        intent.putExtra("correctAnswers", correctAnswers);
        intent.putExtra("wrongAnswers", wrongAnswers);
        intent.putExtra("score", score);
        intent.putParcelableArrayListExtra("queries", queries);
        intent.putExtra("category", category);
        startActivity(intent);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-11 01:19:12

尝试以下方法,看看是否有帮助。此外,不需要在计时器自己的onFinish()方法中调用cancel(),因为计时器已经被取消才能到达该方法。

代码语言:javascript
复制
public void loadQuestion() {
        if(i == 9) {
            endQuiz();
        } else {
            cdTimer.start(); //start timer here
            answer = queries.get(i).getCorrectAnswer();
            question.setText(queries.get(i).getQuery());

            answer1.setText(queries.get(i).getA1());
            answer2.setText(queries.get(i).getA2());
            answer3.setText(queries.get(i).getA3());
            answer4.setText(queries.get(i).getA4());

            answer1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {

                    cdTimer.cancel(); // end it when clicked.
                    queries.get(i).setSelectedAnswer(0);
                    if(answer == 0) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });

            //Same code for button 1 for buttons 2 through 4.
        } 
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14263381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档