postDelayed的以下实现有什么问题?

问题描述

我已经使用Firebase制作了一个测验应用程序,当用户回答一个问题时,我会以以下方式使用处理程序来显示一个问题:

private void checkAnswer(int selectedOption,View view) {

        if (selectedOption == selected_questions.get(quesNum).getAnswer()) {
            //Right Answer
            (view).setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
            quizReference.child(selected_questions.get(quesNum).getId()).child("correct_attempts").setValue(String.valueOf(Integer.valueOf(selected_questions.get(quesNum).getCorrect_attempts()) + 1));
            quizReference.child(selected_questions.get(quesNum).getId()).child("total_attempts").setValue(String.valueOf(Integer.valueOf(selected_questions.get(quesNum).getTotal_attempts()) + 1));
            score++;

        } else {
            //Wrong Answer
            (view).setBackgroundTintList(ColorStateList.valueOf(Color.RED));

            quizReference.child(selected_questions.get(quesNum).getId()).child("total_attempts").setValue(String.valueOf(Integer.valueOf(selected_questions.get(quesNum).getTotal_attempts()) + 1));

            switch (selected_questions.get(quesNum).getAnswer()) {
                case 1:
                    options[0].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
                    break;
                case 2:
                    options[1].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
                    break;
                case 3:
                    options[2].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
                    break;
                case 4:
                    options[3].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
                    break;

            }

        }

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                changeQuestion();
            }
        },2000);


    }

但是发生的是,在第一个问题之后,计时器开始异常运行,问题开始随机变化,选项框的颜色也以我无法理解的方式变化。我或多或少是Android的初学者,在显示了第一个问题后,我尝试调试导致问题的原因,但我无法做到。我可以将其范围缩小到可能引起此问题的处理程序,但我不确定100%。

功能显示一个问题:

 private void changeQuestion() {
        if (quesNum < selected_questions.size() - 1) {
            quesNum++;

            playAnim(question,0);
            playAnim(option1_text,1);
            playAnim(option2_text,2);
            playAnim(option3_text,3);
            playAnim(option4_text,4);

            qCount.setText(String.valueOf(quesNum + 1) + "/" + String.valueOf(selected_questions.size()));

            timer.setText(String.valueOf(30));
            startTimer();

        } else {
            // Go to score Activity
            Intent intent = new Intent(quizActivity.this,scoreActivity.class);
            intent.putExtra("score",String.valueOf(score) + "/" + String.valueOf(selected_questions.size()));
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);

        }


    }

功能播放动画以更改问题:

private void playAnim(final View view,final int value,final int viewNum) {

       

        view.animate().alpha(value).scaleX(value).scaleY(value).setDuration(500)
                .setStartDelay(100).setInterpolator(new DecelerateInterpolator())
                .setListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        if (value == 0) {
                            switch (viewNum) {
                                case 0:
                                    ((TextView) view).setText(selected_questions.get(quesNum).getQuestion());
                                    break;
                                case 1:
                                    ((TextView) view).setText(selected_questions.get(quesNum).getoption1());
                                    break;
                                case 2:
                                    ((TextView) view).setText(selected_questions.get(quesNum).getoption2());
                                    break;
                                case 3:
                                    ((TextView) view).setText(selected_questions.get(quesNum).getoption3());
                                    break;
                                case 4:
                                    ((TextView) view).setText(selected_questions.get(quesNum).getoption4());
                                    break;

                            }


                            if (viewNum != 0)
                                (view).setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#E99C03")));


                            playAnim(view,1,viewNum);

                        }

                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });

    }

这是开始第一个问题的代码

private void setQuestion() {
        timer.setText(String.valueOf(30));

        question.setText(selected_questions.get(0).getQuestion());
        option1_text.setText(selected_questions.get(0).getoption1());
        option2_text.setText(selected_questions.get(0).getoption2());
        option3_text.setText(selected_questions.get(0).getoption3());
        option4_text.setText(selected_questions.get(0).getoption4());

        qCount.setText(String.valueOf(1) + "/" + String.valueOf(selected_questions.size()));

        startTimer();

        quesNum = 0;
    }

这是计时器的代码

private void startTimer() {
    countDown = new CountDownTimer(32000,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            if (millisUntilFinished < 30000)
                timer.setText(String.valueOf(millisUntilFinished / 1000));
        }

        @Override
        public void onFinish() {
            changeQuestion();
        }
    };

    countDown.start();

}

如果有人需要,这里是整个课程的链接quizActivity.java 任何输入都会真正有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)