You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:42:46