android - 如何将数据从 onCreate() 传递到 onSaveInstanceState()?
问题描述
我的主活动中有一个 onCreate() 函数和一个 onSaveInstanceState() 函数。我在 onCreate() 中声明了一个 Map,我想在我的 onSaveInstanceState() 函数中访问该 Map 的键,以便将它们保存到 outState 包。
class MainActivity: AppCombatActivity(){
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
//Want to access the iconMap here, but it is outside of the Map's scope. How do I access it?
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val iconMap = mapOf("contactlessIcon" to getDrawable(R.drawable.ic_contactless_24px), "fingerprintIcon" to getDrawable(R.drawable.ic_fingerprint_black_48dp), "codeIcon" to getDrawable(R.drawable.ic_code_24px))
}
}
我对 Android 编程相当陌生,所以这可能是一个简单的解决方法。我想iconMap
在 onSaveInstanceState() 中访问,但它超出了iconMap's
范围。我无法创建iconMap
全局变量,因为这会使我的应用程序崩溃。
解决方案
正如@ianhanniballake 评论的那样 - 您不应该保存始终相同的 Drawable。在这种情况下,它尤其没有必要,因为只要活动恢复,您onCreate
就会再次被调用。
但是,要回答您的问题,您可以这样做:
class MainActivity: AppCombatActivity(){
// define it here, so it's a member of the class
lateinit val iconMap: Map<String, Drawable>
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
//now you can use it here
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//set its value
iconMap = mapOf("contactlessIcon" to getDrawable(R.drawable.ic_contactless_24px), "fingerprintIcon" to getDrawable(R.drawable.ic_fingerprint_black_48dp), "codeIcon" to getDrawable(R.drawable.ic_code_24px))
}
}
推荐阅读
- python - 有没有办法根据 Python 中的一列或多列中具有相似值的行来选择表中的某些行?
- javascript - 文件选择器侧边栏通信错误
- wordpress - Wordpress 将数据从一个模板传递到另一个模板
- python - 为什么这个程序没有正确找到数字频率?
- c# - 无法检查整数是否等于零
- nestjs - NestJs 授权/验证用户拥有资源
- python - 如何检查两个列表是否没有相似点?
- python - 创建 Windows 10 桌面快捷方式以在 venv 虚拟环境中运行 python 脚本
- postgresql - 如何改进此 postgresql 查询以计算“Aroon Indicator”
- javascript - 如何在@monaco-editor/react 中为错误添加注释