【问题标题】:How to pass data from onCreate() to onSaveInstanceState()?如何将数据从 onCreate() 传递到 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。

标签: android dictionary kotlin oncreate onsaveinstancestate


【解决方案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))
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2021-12-17
    • 2021-07-12
    • 2017-06-21
    • 2018-07-14
    • 2023-04-09
    • 2020-08-03
    相关资源
    最近更新 更多