繁体   English   中英

如何使 for 循环等待事件处理程序完成? Android

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM