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

如何让按钮根据SharedPreferences中的整数变量变更功能?代码求助

解决按钮跳转未根据Score更新页面的问题

嘿,我一眼就看到问题出在哪啦!你的代码逻辑里有几个时机和变量使用的小问题,导致修改后的page没被正确用到,咱们来逐个修复:

核心问题分析

  • page变量读取时机不对:你在创建OnClickListener的时候就把page的值读出来存到变量里了,点击按钮时虽然修改了SharedPreferences里的page,但跳转用的还是最开始存的旧值,根本没去读更新后的内容。
  • score的读取时机滞后:同样,score是在Listener初始化时获取的,如果用户在其他操作中更新了score,点击按钮时拿的还是旧的分数,判断逻辑会不准确。
  • else分支里重复定义Editor:没必要重新声明SharedPreferences.Editor editor,这会遮蔽外面的editor变量,属于冗余代码。

修正后的代码

public Button button;

public void init() {
    button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 点击时才读取最新的score,确保用的是当前最新分数
            SharedPreferences pref = getSharedPreferences("ScorePref", MODE_PRIVATE);
            int score = pref.getInt("Score", 0);

            // 操作SharedPreferences更新page
            SharedPreferences saveGame = getSharedPreferences("PrefFile", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = saveGame.edit();
            
            if (score >= 150) {
                editor.putString("page", "com.twigofknowledge.variablebuttonpractice.page6");
            } else {
                // 直接用else覆盖所有分数<150的情况,无需重复判断<=150
                editor.putString("page", "com.twigofknowledge.variablebuttonpractice.page5");
            }
            editor.apply();

            // 跳转前才读取最新的page值,确保用的是刚修改后的内容
            String page = saveGame.getString("page", "com.twigofknowledge.variablebuttonpractice.MainActivity");
            
            Intent gotopage = new Intent();
            gotopage.setClassName("com.twigofknowledge.variablebuttonpractice", page);
            startActivity(gotopage);
        }
    });
}

关键修改点说明

  • 把score的读取移到onClick方法里:每次点击按钮时才获取最新的分数,保证判断逻辑用的是当前最新值。
  • 把page的读取移到修改完SharedPreferences之后:更新完page后立刻读取最新值,这样跳转时用的就是刚修改后的页面路径。
  • 移除了else分支里重复的Editor声明:直接复用外面创建的editor,避免变量遮蔽问题。
  • 简化了条件判断:else if (score <=150)改成else即可,因为分数要么大于等于150,要么小于150,覆盖所有情况。

这样修改后,按钮点击时会先根据最新的score更新page,再用更新后的page跳转,就能实现不同分数跳转到不同结局的效果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:40