错误信息:
意思就是registerForActivityResult
不可以在生命周期STARTED之前调用
错误代码示例:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.float_bth).setOnClickListener {
val registerForActivityResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()
) {
// ...
}
registerForActivityResult.launch(intent)
}
}
注意:上面代码中将registerForActivityResult
的创建设置在了点击事件的内部,而此时的APP状态是RESUMED
解决:将registerForActivityResult
的创建移动到onCreate()
中去
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val registerForActivityResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()
) {
// ...
}
findViewById<Button>(R.id.float_bth).setOnClickListener {
registerForActivityResult.launch(intent)
}
}
另外:如果使用fragment
,需要设置在fragment
的onCreate()
中
参考: