Android屏幕在循环时变黑

时间:2015-11-24 15:38:31

标签: android debugging while-loop

我有一个包含多项选择题的活动布局。我的目标是只需要使用一个活动,并在每个问题得到解答后使用新选项刷新布局。但是,我将它放在while loop下面,我希望单选按钮的onClickListener会停止while循环并等待用户选择一个选项,然后更新UI相应地,但屏幕只是黑色。

我已尝试使用调试器,它会在到达while循环时立即停止,但我不知道为什么。

private void play(){
        int questionCount = 1;

        while(questionCount < 20) {

            Question question = new Question();
            final Game game = new Game();
            String[] questions = new String[5];
            final int temp = questionCount;

            questions = game.getQuestions(questionCount);

            A.setText(questions[0]);
            B.setText(questions[1]);
            C.setText(questions[2]);
            D.setText(questions[3]);
            E.setText(questions[4]);

            group.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int answer = group.getCheckedRadioButtonId();
                    boolean correct = game.checkAnswer(answer, temp);

                }
            });

            questionCount++;

        }

    }

2 个答案:

答案 0 :(得分:2)

不使用循环,而是使用一个逻辑,在单击其中一个单选按钮时使用新问题更新屏幕,即屏幕应通过来自onClickListener的调用更新新问题while循环。

答案 1 :(得分:1)

Android拥有自己的事件循环,因此您无需创建自己的事件循环。

更好的实现方法是在Activity的onCreate方法中设置视图,以显示初始问题并为答案按钮设置OnClickListener。然后,单击侦听器可以调用一个处理答案检查并获取下一个问题的类。

示例:

class QuizManager {
    private int mCurrentQuestion;
    String[] mQuestions;

    //TODO: create constructor to initialize variables

    public bool checkAnswer(int answer){
        //TODO: check answer logic
        return isAnswerCorrect;
    }

    public String getNextQuestion(){
        mCurrentQuestion++;
        //TODO: handle the case for the last question
        return mQuestions[mCurrentQuestion];
    }
}

现在你的方法看起来像这样:

private void play(){

    //This should probably be a member variable in your Activity
    QuizManager manager = new QuizManager();

    mQuestionTextView.setText(getNextQuestion();

    group.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int answer = group.getCheckedRadioButtonId();
            if (manager.checkAnswer(answer)){
                mQuestionTextView.setText(getNextQuestion());
            }
        }
    });

}