问题描述
我已经使用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 (将#修改为@)