我有一个包含多项选择题的活动布局。我的目标是只需要使用一个活动,并在每个问题得到解答后使用新选项刷新布局。但是,我将它放在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++;
}
}
答案 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());
}
}
});
}