Android QuizApp点击提交后禁止修改答案及禁用其他按钮问题咨询
实现方案
1. 新增全局状态标记
首先在Activity类中添加一个布尔变量,用来标记当前题目是否已经提交答案:
// 新增全局变量,标记当前题是否已提交答案 private var isAnswerSubmitted = false
2. 拦截已提交后的选项点击事件
修改onClick方法中四个选项的点击逻辑,提交后直接拦截点击,不响应选择操作:
override fun onClick(v: View?) { when (v?.id) { R.id.tv_option_one -> { // 已提交答案就不响应选项点击 if(isAnswerSubmitted) return selectedOptionView(tv_option_one, 1) } R.id.tv_option_two -> { if(isAnswerSubmitted) return selectedOptionView(tv_option_two, 2) } R.id.tv_option_three -> { if(isAnswerSubmitted) return selectedOptionView(tv_option_three, 3) } R.id.tv_option_four -> { if(isAnswerSubmitted) return selectedOptionView(tv_option_four, 4) } R.id.btn_submit -> { if (mSelectedOptionPosition == 0) { mCurrentPosition++ when { mCurrentPosition <= mQuestionsList!!.size -> { setQuestion() } else -> { val intent = Intent(this, ResultActivity::class.java) intent.putExtra(Constants.USER_NAME, mUserName) intent.putExtra(Constants.CORRECT_ANSWERS, mCorrectAnswers) intent.putExtra(Constants.TOTAL_QUESTIONS, mQuestionsList!!.size) startActivity(intent) finish() } } } else { val question = mQuestionsList?.get(mCurrentPosition - 1) if (question!!.correctAnswer != mSelectedOptionPosition) { answerView(mSelectedOptionPosition, R.drawable.wrong_option_border_bg) } else { mCorrectAnswers++ } answerView(question.correctAnswer, R.drawable.correct_option_border_bg) if (mCurrentPosition == mQuestionsList!!.size) { btn_submit.text = "FINISH" } else { btn_submit.text = "GO TO NEXT QUESTION" } mSelectedOptionPosition = 0 // 标记当前题已提交,禁止后续修改选项 isAnswerSubmitted = true } } } }
3. 新题加载时重置状态
修改setQuestion方法,每次加载新题的时候重置提交状态,保证新题可以正常选择选项:
private fun setQuestion() { val question = mQuestionsList!!.get(mCurrentPosition - 1) defaultOptionsView() // 重置提交状态,新题允许选择选项 isAnswerSubmitted = false if (mCurrentPosition == mQuestionsList!!.size) { btn_submit.text = "FINISH" } else { btn_submit.text = "SUBMIT" } progressBar.progress = mCurrentPosition tv_progress.text = "$mCurrentPosition" + "/" + progressBar.max tv_question.text = question.question iv_image.setImageResource(question.image) tv_option_one.text = question.optionOne tv_option_two.text = question.optionTwo tv_option_three.text = question.optionThree tv_option_four.text = question.optionFour }
可选优化
如果需要更明显的不可交互提示,可以在标记答案已提交时给所有选项设置isClickable = false、调低透明度,加载新题时再恢复属性,视觉上更直观提示用户选项不可操作。
内容的提问来源于stack exchange,提问作者amalm9479
相关产品推荐
相关产品推荐

