Android答题APP点击按钮切换背景色异常问题求助
问题分析与解决方案
问题根源
你的代码里,点击按钮后立刻执行了题目切换逻辑:先让questionProgress++,接着调用binding.selectionLayout.removeAllViews()移除了当前所有答题按钮。而你设置的postDelayed是300ms后才恢复按钮背景,这时候原来的selectionBtn已经被销毁了——前面的题目还没来得及展示颜色变化,就被新的题目视图覆盖,只有最后一题不会触发后续的视图移除,所以能正常显示颜色切换。
解决方法
把进度更新、题目切换的逻辑全部移到postDelayed的延迟任务中,确保按钮颜色先完整展示0.3秒,再执行页面切换操作。修改后的代码如下:
selectionBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 判断当前选择是否正确 boolean isCorrect = checkChosen(questionProgress, selectionBtn.getText().toString()); // 设置对应状态的背景色 if (isCorrect) { selectionBtn.setBackgroundResource(R.drawable.correct_button_selected); } else { selectionBtn.setBackgroundResource(R.drawable.wrong_button_selected); } // 延迟0.3秒后执行后续操作:恢复背景 + 更新题目 selectionBtn.postDelayed(new Runnable() { @Override public void run() { // 恢复按钮默认背景 selectionBtn.setBackgroundResource(R.drawable.choice_button_border); // 进度递增 questionProgress++; // 处理最后一题逻辑 if (questionProgress == questionAmount) { binding.submitBtn.setVisibility(View.VISIBLE); binding.progressBar.setProgress(binding.progressBar.getMax()); binding.progressCount.setText(questionAmount + " / " + questionAmount); } // 切换到下一题(如果还有剩余题目) if (questionProgress < questionList.length) { Log.v("progress", String.valueOf(questionProgress)); binding.progressBar.setProgress(questionProgress); binding.progressCount.setText(questionProgress + " / " + questionAmount); binding.quizContent.setText(questionList[questionProgress]); binding.selectionLayout.removeAllViews(); String[] anLi = answerMap.get(questionProgress); for (int i = 0; i < anLi.length - 1; i++) { addSelections(anLi[i]); } } } }, 300); } });
额外提示
如果addSelections方法负责创建新的答题按钮并绑定点击事件,这个逻辑是正常的——每次切换题目都会生成新的按钮实例,不会影响之前的延迟任务执行。
内容的提问来源于stack exchange,提问作者Wonster
相关产品推荐
相关产品推荐

