我有一个循环重复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;
                    }
                }
            }
        });
    }

#1楼 票数:1

但是,就像我在评论中说的那样,迅速地解决了这一问题,通过设计,有更好的方法可以使用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++);
}

  ask by Hunter translate from so

未解决问题?本站智能推荐:

1回复

角度-防止事件循环?

我在事件处理方面仍然遇到问题,需要您的帮助。 这是概念: 为了情境化,假设我有视觉项目,我称之为“组件”。 一个组件由2个javascript对象定义。 一种是包含数据(例如位置x,y,宽度,高度,颜色等)。 另一个是利用名为draw2d的第三方库的视图。 Draw2d使用它自己
2回复

为什么我的LostFocus事件存在无限循环

我是C#的初学者,正在开发一个基本应用程序。 我想检查文本框的值是否为带有以下代码的数字: 当我在文本框中输入字母时,存在一个无限循环,并且看来tb.Focus()实际上导致了LostFocus事件被递归调用。 我不明白为什么调用对象的Focus方法会触发同一对象的LostFocu
5回复

C#WinForms:等待无限循环内的按钮按下

我正在用GUI制作一个简单的Guess-The-Number游戏。 我需要等待一个循环,以等待用户在文本框中输入数字并按“确定”。 如何等待循环中的事件? 注意:我不需要消息框。 这是在主窗口中完成的,因此需要等待输入。 编辑:我应该更好地解释自己。 我知道GUI内有一个循环
1回复

MATLAB事件和无限睡眠或检查循环

我需要对进来的目录中的文件执行数据分析。 我想知道,如果更好, 在目录上实现事件侦听器,并在激活后启动分析过程。 然后让程序永远进入睡眠状态: while(true), sleep(1e10), end 或进行循环轮询以了解更改并做出反应。 我个人更喜欢使用侦听
1回复

angularjs中状态更改事件中的无限循环

我想将状态从“ mycarts”状态更改为“ carts”状态。 因此,我在“ mycarts”控制器中使用了$ stateChangeStart angularjs事件,并设置了一个条件(如果您要从“ mycarts”状态进入的状态是“ carts”状态 ,请转至carts状态)。 这
5回复

为什么我的程序中存在无限循环?

为什么上面的代码陷入无限循环?
3回复

该程序进入无限循环[关闭]

关闭。 这个问题是题外话。 它当前不接受答案。 了解更多 。 想改善这个问题吗? 更新问
1回复

我的C程序陷入了for循环

我正在尝试编写一个程序来计算用户提供的三角数。 当我运行它时,它陷入了for循环中,但仍然会打印出正确的答案,因为我的print语句不在循环中。 任何帮助是极大的赞赏。 我的代码如下: