安卓判断题APP:实现单题仅可作答一次的功能问题
解决True/False答题APP按钮状态保持问题
嘿,我完全懂你的困扰——现在的问题根源在于每次切换题目调用update()时,你都直接把True/False按钮强制设为启用状态,完全忽略了这道题之前有没有被作答过。而且之前在Previous按钮里的尝试没有区分已作答和未作答的题目,才会导致所有按钮都被禁用。
下面是具体的解决方案,分三步修改你的代码:
1. 给Questions类添加作答状态标记
首先要给每个题目增加一个“是否已作答”的字段,用来记录用户有没有答过这道题:
public class Questions { private int mTextResId; private boolean mTrueAnswer; // 新增字段:标记当前题目是否已作答 private boolean isAnswered; public Questions(int textResId, boolean trueAnswer) { mTextResId = textResId; mTrueAnswer = trueAnswer; // 默认初始状态为未作答 isAnswered = false; } // 新增getter和setter方法 public boolean isAnswered() { return isAnswered; } public void setAnswered(boolean answered) { isAnswered = answered; } // 保留你原本的方法 public int getmTextResid() { return mTextResId; } public boolean ismTrueAnswer() { return mTrueAnswer; } }
2. 修改checkAnswer方法,标记题目为已作答
当用户点击True/False按钮作答后,把当前题目的isAnswered设为true:
private void checkAnswer(boolean userPressedTrue) { boolean answerIsTrue = questionbank[mCurrentIndex].ismTrueAnswer(); int messageResId = 0; if (userPressedTrue == answerIsTrue) { messageResId = R.string.correct_toast; } else { messageResId = R.string.incorrect_toast; } // 标记当前题目为已作答 questionbank[mCurrentIndex].setAnswered(true); // 禁用当前题目的True/False按钮 setButtonEnabled(false); Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show(); }
3. 修改update方法,根据作答状态设置按钮
每次切换题目时,不再一刀切启用按钮,而是根据当前题目的isAnswered状态来决定:
public void update() { int ques = questionbank[mCurrentIndex].getmTextResid(); tquestion.setText(ques); // 如果题目未作答则启用按钮,已作答则禁用 setButtonEnabled(!questionbank[mCurrentIndex].isAnswered()); }
为什么这样能解决问题?
核心逻辑就是给每个题目绑定了自己的作答状态,切换题目时会先检查这个状态:
- 如果是已作答的题目,按钮保持禁用
- 如果是未作答的题目,按钮自动启用
这样不管用户怎么点Previous/Next切换题目,已答过的题按钮都会保持禁用状态,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

