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

从另一Activity更新SharedPreferences后首个Activity的TextView无更新如何解决

解决方案

一、先修复现有代码的显性错误

  • 修正编辑器类名拼写错误
    系统提供的SP编辑器接口是SharedPreferences.Editor,你代码中写的SharedPreferences.Editors多了后缀s,会直接引发编译异常。
  • 删除第一个Activity的错误初始化逻辑
    你当前在第一个Activity的onCreate中每次启动都强制把t的值设为0,会直接覆盖第二个Activity写入的修改;同时要删除未定义变量editor的commit()调用,这行属于无效冗余代码。初始化默认值仅需要在t对应的key不存在时执行即可。
  • 第二个Activity修改完成后必须提交更改
    你第二个Activity调用putInt后没有执行apply()或commit()提交,修改仅保存在内存中,不会写入SharedPreferences持久化存储。

二、修复后可运行代码示例

第一个Activity代码

public class FirstActivity extends AppCompatActivity {
    private TextView name;
    private SharedPreferences coin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        name = findViewById(R.id.textview);
        coin = getSharedPreferences("saved", MODE_PRIVATE);
        // 仅当key不存在时初始化默认值,避免每次启动覆盖已存储的数据
        if(!coin.contains("t")){
            SharedPreferences.Editor editor2 = coin.edit();
            editor2.putInt("t", 0).apply();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 每次回到第一个页面都读取最新值刷新UI
        int a = coin.getInt("t", 0);
        name.setText(String.valueOf(a));
    }
}

第二个Activity加10的逻辑代码

SharedPreferences coin = getSharedPreferences("saved", MODE_PRIVATE);
SharedPreferences.Editor editor2 = coin.edit();
int a = coin.getInt("t", 0);
int b = a + 10;
editor2.putInt("t", b);
// 提交修改写入持久化存储
editor2.apply();

三、可选实时更新方案

如果你需要在第二个页面修改数值时,第一个页面无需切回就实时更新,可以在第一个Activity注册SP变化监听:

// 定义监听变量
private SharedPreferences.OnSharedPreferenceChangeListener spListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals("t")){
            int newValue = sharedPreferences.getInt(key,0);
            name.setText(String.valueOf(newValue));
        }
    }
};

// 在onCreate中注册监听
@Override
protected void onCreate(Bundle savedInstanceState) {
    // 原有其他逻辑保留
    coin.registerOnSharedPreferenceChangeListener(spListener);
}

// 在onDestroy中注销监听避免内存泄漏
@Override
protected void onDestroy() {
    super.onDestroy();
    coin.unregisterOnSharedPreferenceChangeListener(spListener);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:03:01