[英]How to make the for loop wait for an event handler to finish? Android
我有一个迭代 10 次的循环。 每次我更新问题和选择并检查正确的选择。 问题是,循环不会等待setOnClickListner
完成其工作。 它只是忽略它并迭代到最后,此外,如果我将counter
放在侦听器中,它只会进入无限循环并且屏幕变暗。 我怎样才能克服这个?
注意: counter
已全局声明。
for(;counter<10;counter++){
questionTv.setText(questions[counter]);
questionImage.setImageResource(images[counter]);
choice1.setText(choices[counter][0]);
choice2.setText(choices[counter][1]);
choice3.setText(choices[counter][2]);
choice4.setText(choices[counter][3]);
choice1.setEnabled(true);
choice2.setEnabled(true);
choice3.setEnabled(true);
choice4.setEnabled(true);
choicesRg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group,int checkedId){
switch(checkedId){
case R.id.choice1:{
checkAnswer(answers,choice1,choice2,choice3,choice4,scoreTv); //a method to check the answer and do necessary modification.
break;
}
case R.id.choice2:{
checkAnswer(answers,choice2,choice1,choice3,choice4,scoreTv);
break;
}
case R.id.choice3:{
checkAnswer(answers,choice3,choice2,choice1,choice4,scoreTv);
break;
}
case R.id.choice4:{
checkAnswer(answers,choice4,choice2,choice3,choice1,scoreTv);
break;
}
}
}
});
}
但是,就像我在评论中所说的那样,很快就可以使用 Android 组件来设计更好的方法来完成您正在做的事情,而无需循环。
你有一个问题列表,并且可以预见问题 go 从 1 到 10(在你的情况下),所以让我们在每次调用checkAnswer
并随后刷新视图后增加问题编号:
private void setQuestions(int questionNum) {
questionTv.setText(questions[questionNum]);
questionImage.setImageResource(images[questionNum]);
choice1.setText(choices[questionNum][0]);
choice2.setText(choices[questionNum][1]);
choice3.setText(choices[questionNum][2]);
choice4.setText(choices[questionNum][3]);
choice1.setEnabled(true);
choice2.setEnabled(true);
choice3.setEnabled(true);
choice4.setEnabled(true);
choicesRg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group,int checkedId){
switch(checkedId){
case R.id.choice1:{
checkAnswer(answers,choice1,choice2,choice3,choice4,scoreTv, questionNum); //a method to check the answer and do necessary modification.
break;
}
case R.id.choice2:{
checkAnswer(answers,choice2,choice1,choice3,choice4,scoreTv, questionNum);
break;
}
case R.id.choice3:{
checkAnswer(answers,choice3,choice2,choice1,choice4,scoreTv, questionNum);
break;
}
case R.id.choice4:{
checkAnswer(answers,choice4,choice2,choice3,choice1,scoreTv, questionNum);
break;
}
}
}
});
}
private void checkAnswer(List<String> answers,
boolean choice1,
boolean choice2,
boolean choice3,
boolean choice4,
TextView scoreTv,
int questionNum) {
// Do stuff
setQuestions(questionNum++);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.