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

Android Java开发中如何在Shared Preferences中保存并更新状态?

Android SharedPreferences 状态存储与切换实现方案

1. 初始化SharedPreferences实例

首先获取应用私有模式的SharedPreferences实例,存储文件仅当前应用可访问:

// Kotlin 写法(Activity/Fragment 中调用)
val sharedPref = getSharedPreferences("app_config", Context.MODE_PRIVATE)
// Java 写法
SharedPreferences sharedPref = getSharedPreferences("app_config", Context.MODE_PRIVATE);

第一个参数为存储的XML文件名,可自定义。

2. 登录成功后写入初始状态

用户登录验证通过后,将初始登录状态、视图状态写入SharedPreferences:

sharedPref.edit()
    .putBoolean("is_login", true) // 存储登录状态
    .putBoolean("is_list_view", true) // 存储默认视图状态,示例为默认列表视图
    .apply()

apply()为异步写入,不会阻塞主线程;如果需要确认写入结果,可替换为commit()同步写入,会返回布尔值表示写入是否成功。

3. 按钮点击切换并覆盖状态

给切换按钮设置点击事件,每次点击读取当前状态后计算新状态,直接写入覆盖即可:
SharedPreferences 对相同Key执行put操作时会自动覆盖旧值,无需额外做删除处理

toggleViewBtn.setOnClickListener {
    // 读取当前视图状态,第二个参数为读取失败时的默认值
    val currentListViewState = sharedPref.getBoolean("is_list_view", true)
    val newListViewState = !currentListViewState
    // 覆盖写入新状态
    sharedPref.edit()
        .putBoolean("is_list_view", newListViewState)
        .apply()
    // 刷新当前页面视图
    refreshPageView(newListViewState)
}

4. 页面启动时读取状态渲染

每次页面激活时读取存储的状态,直接渲染对应视图即可:

override fun onResume() {
    super.onResume()
    // 校验登录状态,未登录跳转登录页
    val isLogin = sharedPref.getBoolean("is_login", false)
    if (!isLogin) {
        startActivity(Intent(this, LoginActivity::class.java))
        finish()
        return
    }
    // 读取视图状态渲染页面
    val currentViewState = sharedPref.getBoolean("is_list_view", true)
    refreshPageView(currentViewState)
}

// 自定义视图刷新方法,根据参数切换视图模式
private fun refreshPageView(isListView: Boolean) {
    if (isListView) {
        recyclerView.layoutManager = LinearLayoutManager(this)
    } else {
        recyclerView.layoutManager = GridLayoutManager(this, 2)
    }
    recyclerView.adapter?.notifyDataSetChanged()
}

注意事项

  • 不要使用MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE等公开权限模式,会导致数据泄露,Android 7.0之后官方已经禁用这类模式
  • SharedPreferences仅适合存储轻量KV数据,不要存入大对象、长文本等内容,会拖慢应用启动速度
  • 多条数据同时修改时可批量提交,减少IO次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:06