如何将数据从 onCreate() 传递到 onSaveInstanceState()?

How to pass data from onCreate() to onSaveInstanceState()?

我的 Main Activity 中有一个 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 设为全局变量,因为这会使我的应用程序崩溃。

正如@ianhanniballake 评论的那样 - 您不应该保存始终相同的 Drawable。在这种情况下,这是特别没有必要的,因为只要 activity 恢复,你的 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))
     }
}