如何解决为什么一次只调用一次,TextViews中的文本会更改两次?
我知道setText
仅更改了一次文本,但是在进入quizActivity
我制作的是一个其中有一个活动的应用程序,里面有一个测验,一个问题和4个选项一起显示。当用户选择一个选项时,如果该选项正确,那么它将变为绿色和红色,此外,然后我打开一个对话框,显示答案是对还是错,然后在用户单击{{1}时更改问题}。
但是,当用户选择一个选项时,在单击该选项然后在对话框中单击“下一步”的过程中,问题和选项中的文本发生了变化,我似乎无法弄清楚这是怎么回事为什么会这样。总的来说,问题和选项只应更改一次,而更改两次。意外更改是用户单击选项并打开对话框时。
这是代码:
Next
这是检查答案的功能:
@Override
public void onClick(View view) {
int selectedOption = 0;
switch (view.getId()) {
case R.id.option_1_tile:
selectedOption = 1;
break;
case R.id.option_2_tile:
selectedOption = 2;
break;
case R.id.option_3_tile:
selectedOption = 3;
break;
case R.id.option_4_tile:
selectedOption = 4;
break;
default:
}
checkAnswer(selectedOption,view);
}
这是更改问题的函数:
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++;
correctDialog();
} 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;
}
wrongDialog ();
}
}
这是设置文本和动画的功能:
private void changeQuestion() {
resetColor ();
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()));
} 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) {
}
});
}
尽管我很乐意回答您可能需要的任何其他信息/代码,但我已尽力向您解释。此外,如果您有时间运行该项目is the link,并且可以更好地了解问题,则可以使用。{p>
解决方法
我已经检查了您的代码。您已在setUpdates方法中放置了addValueEventListener。选择选项后,您可以通过设置总尝试次数等字段来更新Firestore数据库。结果,事件监听器被触发,并调用了“ selectQuestionSet”函数。
因此,每次选择一个选项时,都会调用selectQuestionSet函数。您应该确保它一开始只被调用一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。