如何将数据从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编程,因此这可能很容易解决。我想访问onSaveInstanceState()中的iconMap,但它不在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))
     }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...