Android Kotlin从Utils类启动活动会导致SavedInstanceState为Null
为了事先澄清一下,我已经在SO中广泛搜索了类似的问题,以找到我问题的答案 我将参考以下(列举一些来源):Android Kotlin从Utils类启动活动会导致SavedInstanceState为Null,android,kotlin,android-intent,android-activity,Android,Kotlin,Android Intent,Android Activity,为了事先澄清一下,我已经在SO中广泛搜索了类似的问题,以找到我问题的答案 我将参考以下(列举一些来源): 我有一个主要活动和四个其他不同的活动,让我们称它们为a到D 我还有一个Utilities类,它设置从活动a到D中的click listeners到图像按钮 这些侦听器然后打开一个新的活动,即 出于某种原因,在活动E的onCreate方法中,savedInstanceState始终为空。 我曾尝试从MainActivity设置侦听器,但没有效果。 我还从MainActivity传递了
onCreate
方法中,savedInstanceState
始终为空。
我曾尝试从MainActivity设置侦听器,但没有效果。
我还从MainActivity传递了上下文(而不是使用滚动视图),但这也没有效果
下面是一段代码
实用程序.kt
class Utilities {
companion object {
/...
fun setTooltipsAndListeners(scrollView: ScrollView) {
val buttons: ArrayList<View> = scrollView.touchables
for (button in buttons) {
val tooltipText = button.contentDescription
if (tooltipText != null) {
TooltipCompat.setTooltipText(button, tooltipText)
}
button.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val tag: String? = v?.tag as? String
val intent = Intent(scrollView.context, ActivityE::class.java)
intent.putExtra("symbol_name", tooltipText)
intent.putExtra("symbol_image", tag)
scrollView.context.startActivity(intent)
}
})
}
}
/...
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_name)
setDataToUI(savedInstanceState)
}
private fun setDataToUI(savedInstanceState: Bundle?) {
if (savedInstanceState == null) {
Log.d("TAG", "savedInstanceState IS NULL")
return
}
/... Inner logic that is not relevant
}
您需要使用
getIntent()
而不是savedInstanceState
。因此,您的代码将如下更改:override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_name)
setDataToUI(intent)
}
private fun setDataToUI(intent: Intent?) {
if (intent.getStringExtra("symbol_name") == null) {
Log.d("TAG", "No data passed for symbol_name")
return
}
// Do the same for other strings. Or alternatively, you can pass Bundle
// data from your Utility and retrieve the bundle through the intent as well
}
savedInstanceState
用于在活动状态更改时存储数据,但您正在通过实用程序类中的Intent
传递数据