如何将数据从 onCreate() 传递到 onSaveInstanceState()?
Posted
技术标签:
【中文标题】如何将数据从 onCreate() 传递到 onSaveInstanceState()?【英文标题】:How to pass data from onCreate() to onSaveInstanceState()? 【发布时间】:2020-12-06 04:09:33 【问题描述】:我的主活动中有一个 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 编程相当陌生,所以这可能是一个简单的解决方法。我想访问 onSaveInstanceState() 中的iconMap
,但它在iconMap's
范围之外。我不能将 iconMap
设为全局变量,因为这会使我的应用程序崩溃。
【问题讨论】:
您在onSaveInstanceState()
中保存了哪些iconMap
?通常,您应该保存的唯一内容是用户的状态,而不是始终相同的字符串或 Drawable。
【参考方案1】:
正如@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))
【讨论】:
以上是关于如何将数据从 onCreate() 传递到 onSaveInstanceState()?的主要内容,如果未能解决你的问题,请参考以下文章