开发者社区 问答 正文

如何在Android Quiz App中更改计时器?

我的测验android应用程序有20个多项选择题。每个问题的计时器为30秒。我不想为每个问题分别运行计时器。我希望所有20个问题的倒计时计时器总共运行20分钟,而不是每个问题30秒。怎么做?请帮忙。

private void startCountDown() {
    countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            timeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            timeLeftInMillis = 0;
            updateCountDownText();
            checkAnswer();
        }
    }.start();
}

private void updateCountDownText() {
    int minutes = (int) (timeLeftInMillis / 1000) / 60;
    int seconds = (int) (timeLeftInMillis / 1000) % 60;

    String timeFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);

    textViewCountDown.setText(timeFormatted);

    if (timeLeftInMillis < 10000) {
        textViewCountDown.setTextColor(Color.RED);
    } else {
        textViewCountDown.setTextColor(textColorDefaultCd);
    }
}

private void checkAnswer() {
    answered = true;

    countDownTimer.cancel();

    RadioButton rbSelected = findViewById(rbGroup.getCheckedRadioButtonId());
    int answerNr = rbGroup.indexOfChild(rbSelected) + 1;

    if (answerNr == currentQuestion.getAnswerNr()) {
        score++;
        textViewScore.setText("Score: " + score);
    }

    showSolution();
}

private void showSolution() {
    rb1.setTextColor(Color.RED);
    rb2.setTextColor(Color.RED);
    rb3.setTextColor(Color.RED);
    rb4.setTextColor(Color.RED);

    switch (currentQuestion.getAnswerNr()) {
        case 1:
            rb1.setTextColor(Color.GREEN);
            textViewQuestion.setText("Option 1 is correct");
            break;
        case 2:
            rb2.setTextColor(Color.GREEN);
            textViewQuestion.setText("Option 2 is correct");
            break;
        case 3:
            rb3.setTextColor(Color.GREEN);
            textViewQuestion.setText("Option 3 is correct");
            break;
        case 4:
            rb4.setTextColor(Color.GREEN);
            textViewQuestion.setText("Option 4 is correct");
            break;
    }

    if (questionCounter < questionCountTotal) {
        buttonConfirmNext.setText("Next");
    } else {
        buttonConfirmNext.setText("Finish");
    }
}

private void finishQuiz() {

    finish();
}

@Override
public void onBackPressed() {
    if (backPressedTime + 2000 > System.currentTimeMillis()) {
        finishQuiz();
    } else {
        Toast.makeText(this, "Press back again to finish", Toast.LENGTH_SHORT).show();
    }

    backPressedTime = System.currentTimeMillis();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }

}

展开
收起
垚tutu 2019-12-26 21:11:57 1345 分享 版权
阿里云 AI 助理回答

要实现一个总时长为20分钟的倒计时器,而不是每个问题单独30秒,你可以设置一个总的倒计时时间(即20分钟),然后在每个问题页面更新显示剩余时间。当用户进入下一个问题或回到上一个问题时,不需要重置这个倒计时器,而是持续计算从开始到当前的已用时间,并从总时长中减去这部分时间。

这里是一个简化的思路和代码调整建议:

  1. 定义全局变量:在你的Activity或Fragment中定义一个表示总时长的变量,以及一个记录测验开始时间的变量。
private long totalQuizTimeInMillis = 20 * 60 * 1000; // 20 minutes in milliseconds
private long quizStartTimeInMillis;
  1. 启动测验时初始化倒计时:在开始测验时记录当前时间作为测验的起始时间。
private void startQuiz() {
    quizStartTimeInMillis = System.currentTimeMillis();
    startCountDown();
}
  1. 修改startCountDown方法:现在,你需要根据总时长和已经过去的时间来计算剩余时间。
private void startCountDown() {
    countDownTimer = new CountDownTimer(totalQuizTimeInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            long elapsedTime = System.currentTimeMillis() - quizStartTimeInMillis;
            timeLeftInMillis = totalQuizTimeInMillis - elapsedTime;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            timeLeftInMillis = 0;
            updateCountDownText();
            finishQuiz(); // 或者处理超时逻辑
        }
    }.start();
}
  1. 保持updateCountDownTextonBackPressed方法不变:这些方法用于更新UI和处理返回按钮事件,它们不需要改变。

通过这种方式,你将有一个针对整个测验的统一倒计时,而不仅仅是针对单个问题。记得在每次问题切换时不要重新启动倒计时器,只需让其继续运行即可。这样,无论用户花在每个问题上的时间是多少,整个测验的总限时都是20分钟。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答