You need to enable JavaScript to run this app. Android屏幕旋转时onSaveInstanceState与onRestoreInstanceState无法保存颜色问题
优惠活动
大模型
产品
解决方案
定价
更多

Android屏幕旋转时onSaveInstanceState与onRestoreInstanceState无法保存颜色问题

旋转后颜色不保存问题修复说明

你的代码存在3处核心问题,按如下方案修改即可生效:

问题1:onCreate无条件生成新随机颜色

Activity旋转重建时,onCreate会优先执行,当前代码没有判断是否为重建状态,每次都会调用generateRandomColors()生成新的随机颜色,直接覆盖后续恢复逻辑的结果。

修复方案:

修改onCreate中生成颜色的逻辑,仅首次创建时生成随机颜色:

// 原代码:generateRandomColors();
// 替换为如下逻辑
if (savedInstanceState == null) {
    generateRandomColors();
}

问题2:onRestoreInstanceState的switch判断逻辑错误

你在switch中传入的是带引号的"nameOfColor",这是固定字符串常量,永远无法匹配下方的颜色case,恢复逻辑完全不执行。

问题3:恢复时未给全局colorName变量赋值

现有恢复逻辑仅修改了TextView背景色,没有给全局的colorName变量赋值,后续用户提交答案时会出现校验错误。

问题2+3的修复方案:

修改onRestoreInstanceState的逻辑如下:

@Override
public void onRestoreInstanceState(@Nullable Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if(savedInstanceState != null){
        String nameOfColor = savedInstanceState.getString("Question_TextViewColor");
        // 去掉引号,传入变量本身做判断
        switch(nameOfColor){
            case "BLUE":
                question_TextView.setBackgroundColor(Color.BLUE);
                colorName = "BLUE";
                break;
            case "RED":
                question_TextView.setBackgroundColor(Color.RED);
                colorName = "RED";
                break;
            case "GREEN":
                question_TextView.setBackgroundColor(Color.GREEN);
                colorName = "GREEN";
                break;
            case "CYAN":
                question_TextView.setBackgroundColor(Color.CYAN);
                colorName = "CYAN";
                break;
            case "BLACK":
                question_TextView.setBackgroundColor(Color.BLACK);
                colorName = "BLACK";
                break;
            case "YELLOW":
                question_TextView.setBackgroundColor(Color.YELLOW);
                colorName = "YELLOW";
                break;
            case "ORANGE":
                question_TextView.setBackgroundColor(Color.rgb(235, 122, 52));
                colorName = "ORANGE";
                break;
            case "GRAY":
                question_TextView.setBackgroundColor(Color.GRAY);
                colorName = "GRAY";
                break;
            case "PINK":
                question_TextView.setBackgroundColor(Color.rgb(235, 52, 180));
                colorName = "PINK";
                break;
            case "PURPLE":
                question_TextView.setBackgroundColor(Color.rgb(131, 52, 235));
                colorName = "PURPLE";
                break;
        }
    }
}

内容的提问来源于stack exchange,提问作者Imtiaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:24:10