簡體   English   中英

Android屏幕在while循環上變黑

[英]Android screen goes black on 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++;

        }

    }

代替使用循環,使用一種邏輯,該邏輯將在單擊單選按鈕之一時使用新問題來更新屏幕,即,屏幕應通過onClickListener的調用而不是while循環來使用新問題來更新。

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM