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
相关产品推荐
相关产品推荐

