首页 > 解决方案 > 如何将数据从 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全局变量,因为这会使我的应用程序崩溃。

标签: androiddictionarykotlinoncreateonsaveinstancestate

解决方案


正如@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))
     }
}

推荐阅读