测验应用(Quiz App)答对一题后分数停止增长的修复方案咨询
问题分析与解决方案
我一眼就瞅出问题所在啦——你那个clicked变量在第一次答对题目后被设为false,但切换到下一题的时候完全没把它重置回true,导致后续哪怕答对了新题目,也触发不了分数增加的逻辑。
具体修改方案
核心就是在切换到新题目时,把允许加分的标记重置。直接给你改好关键代码:
btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { radioGroup=(RadioGroup)findViewById(R.id.radioGroup); // 先处理当前题目的得分判断 try { // 先判断用户有没有选选项,避免空指针 if(radioGroup.getCheckedRadioButtonId() != -1){ getClickedButton=(RadioButton)findViewById(radioGroup.getCheckedRadioButtonId()); if(getClickedButton.getText().equals(answer) && clicked){ score++; updateScore(score); clicked=false; // 当前题目答对后标记,防止重复点击加分 } } }catch (Exception e){ Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } // 切换题目逻辑 if (questionNumber < totalQuestion) { updateQuestion(); radioGroup.clearCheck(); clicked = true; // 重点!新题目加载后重置标记,允许下一题答对加分 } else { resultIntent(); } } });
额外优化小建议
- 可以把全局的
getClickedButton去掉,每次在点击事件里临时获取就行,减少不必要的全局变量 - 增加
radioGroup.getCheckedRadioButtonId() != -1的判断,避免用户没选选项就点Next导致的异常 - 如果题目数量多,还可以用一个数组
boolean[] isQuestionScored来记录每个题目是否已经得分,逻辑会更清晰
这样改完后,每切换到新题目,clicked就会变回true,答对时能正常加分,而且同一题目多次点正确选项也不会重复加分,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Leena harani
相关产品推荐
相关产品推荐

