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

Android 如何使for循环等待事件处理程序完成?安卓,android,for-loop,events,infinite-loop,Android,For Loop,Events,Infinite Loop,我有一个循环,循环10次。每次我都会更新问题和选项,并检查选项是否正确。问题是,循环不会等待setOnClickListner完成它的工作!它只是忽略它并迭代到最后。另外,如果我将计数器放在侦听器中,它将进入无限循环,屏幕将变暗。我怎样才能克服这个问题 注意:计数器已全局声明 for(;counter<10;counter++){ questionTv.setText(questions[counter]); questionImage.setImageR

我有一个循环,循环10次。每次我都会更新问题和选项,并检查选项是否正确。问题是,循环不会等待
setOnClickListner
完成它的工作!它只是忽略它并迭代到最后。另外,如果我将
计数器
放在侦听器中,它将进入无限循环,屏幕将变暗。我怎样才能克服这个问题

注意:
计数器
已全局声明

 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;
                    }
                }
            }
        });
    }

for(;counter很快就提到了这一点,但是,正如我在评论中所说的,有更好的方法可以通过设计来使用Android组件完成您正在做的事情,而不需要循环

您有一个问题列表,可以预见问题从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++);
}
private void setQuestions(int questionNum){
questionTv.setText(问题[questionNum]);
setImageResource(images[questionNum]);
选项1.setText(选项[questionNum][0]);
选项2.setText(选项[questionNum][1]);
选项3.setText(选项[questionNum][2]);
选项4.setText(选项[questionNum][3]);
选项1.setEnabled(真);
选项2.setEnabled(真);
选项3.setEnabled(true);
选项4.setEnabled(真);
choicesRg.setOnCheckedChangeListener(新的RadioGroup.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(RadioGroup组,int checkedId){
开关(检查EDID){
案例R.id.选择1:{
checkAnswer(答案、选项1、选项2、选项3、选项4、scoreTv、问号);//检查答案并进行必要修改的方法。
打破
}
案例R.id.选择2:{
检查答案(答案、选项2、选项1、选项3、选项4、计分电视、问题编号);
打破
}
案例R.id.选择3:{
检查答案(答案、选项3、选项2、选项1、选项4、计分电视、问题编号);
打破
}
案例R.id.选择4:{
检查答案(答案、选项4、选项2、选项3、选项1、scoreTv、问题编号);
打破
}
}
}
});
}
私有无效检查答案(列出答案,
布尔选择1,
布尔选择2,
布尔选择3,
布尔选择4,
TextView scoreTv,
int questionNum){
//做事
设置问题(questionNum++);
}

这是一个糟糕的设计,如果你有10组问题,那么在viewpager中有10个片段就更有意义了。@JakeB,对不起。我只是一个初学者。我甚至不知道什么是片段!而且,这是我的第一个应用程序。非常感谢。你真的帮了我很大的忙!