如何让按钮根据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
相关产品推荐
相关产品推荐

