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

Kotlin中MutableList横竖屏切换时数据保存与恢复问题求助

解决横竖屏切换时MutableList数据丢失的问题

首先明确:onSaveInstanceState 和 onRestoreInstanceState 完全可以用来保存恢复集合数据,问题大概率出在保存/恢复的代码实现细节上,以下是正确的实现步骤及常见问题排查:

1. 正确保存列表数据到Bundle

在Activity的onSaveInstanceState方法中,利用Bundle支持的集合存储方法保存数据:

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    // 直接将MutableList转成ArrayList存入Bundle,适配系统API
    outState.putIntegerArrayList("KEY_ROWS_SAVED", ArrayList(rowsSavedList))
}

2. 正确恢复列表数据

在onRestoreInstanceState或者onCreate方法中恢复数据(注意val修饰的MutableList无法直接重新赋值,需更新原列表内容):

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val savedList = savedInstanceState.getIntegerArrayList("KEY_ROWS_SAVED")
    savedList?.let {
        rowsSavedList.clear() // 清空原列表
        rowsSavedList.addAll(it) // 批量添加恢复的数据
    }
}

常见错误排查

  • Key不统一:保存和恢复时使用的key字符串必须完全一致,比如示例中的KEY_ROWS_SAVED不能写错
  • 错误赋值val变量:如果rowsSavedList是val修饰的,不能直接rowsSavedList = savedList,必须通过clear()+addAll()更新原列表
  • 忽略空安全:恢复时要判断取出的列表是否为null,避免空指针异常
  • 未调用super方法:onSaveInstanceState和onRestoreInstanceState必须先调用super,否则系统默认的状态保存逻辑会失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:31:00