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

Android开发:如何根据Level状态控制butStart按钮的显示与隐藏?

问题分析与解决方案

你的核心问题是读取SharedPreferences的时机晚于buttonClick1()的调用,导致执行显示逻辑时,level还是默认的初始值0,所以按钮的显示状态永远是default分支的VISIBLE,无法根据实际存储的Level值动态调整。

修正步骤:

  1. 调整代码执行顺序,先从SharedPreferences读取level值,再调用buttonClick1()方法
  2. 保留原有显示逻辑的同时,建议补充异常打印方便调试

修正后的完整代码:

private ImageButton butStart;
int level;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout_id); // 替换为你的布局ID

    butStart = findViewById(R.id.butStart);
    // 先读取存储的Level值
    SharedPreferences save = getSharedPreferences("Save", MODE_PRIVATE);
    level = save.getInt("Level", 0);
    // 再执行按钮初始化和显示逻辑
    buttonClick1();
}

public void buttonClick1() {
    butStart.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switch (level) {
                        case 0:
                            try {
                                Intent intent = new Intent(MainActivity.this, go1.class);
                                startActivity(intent);
                                finish();
                            } catch (Exception e) {
                                e.printStackTrace(); // 打印异常便于调试
                            }
                            break;
                        case 1:
                            try {
                                Intent intent = new Intent(MainActivity.this, go2.class);
                                startActivity(intent);
                                finish();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            break;
                        case 2:
                            try {
                                Intent intent = new Intent(MainActivity.this, go3.class);
                                startActivity(intent);
                                finish();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            break;
                        default: break;
                    }
                }
            });

    // 按Level值控制按钮显示/隐藏
    switch (level) {
        case 1:
            butStart.setVisibility(View.GONE);
            break;
        // 如需其他Level值隐藏按钮,可在此添加case分支
        // case 2:
        //     butStart.setVisibility(View.GONE);
        //     break;
        default:
            butStart.setVisibility(View.VISIBLE);
            break;
    }
}

额外提示:

  • 确认关卡切换时的SharedPreferences写入逻辑正常,确保Level值能正确保存
  • 不要使用空catch块,打印异常可以快速定位页面跳转时的潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:15:33