startActivityForResult失效,以及registerForActivityResult使用闪退、奔溃问题
在学第一行代码第三版的时候,向下一个Activity传递数据时,说用startActivityForResult
startActivityForResult被抛弃了,查了一下,发现要用registerForActivityResult
button1.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
val startActivity = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
it -> when(it.resultCode) {
Activity.RESULT_OK -> {
val return_data = it.data?.getStringExtra("data_return")
Log.d("FirstActivity", "return data is $return_data")
}else -> {
}
}
}
startActivity.launch(intent)
}
但是一点击按钮就出问题,程序就闪退了
显示问题
FATAL EXCEPTION: main
java.lang.IllegalStateException: LifecycleOwner com.example.activatetest.FirstActivity@f60f224 is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
但一直搜第一行,第二行和后面很多一样导致没看到,搜了都是差不多教怎么使用新的registerForActivityResult
后面注意到这个,以及前面搜的时候有人说,要在OnCreate的时候不能在OnStart
一开始还以为我这个button1以及是Oncreate里面了,没想到这样是不行的,要放在外边
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.first_layout)
val startActivity = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
it -> when(it.resultCode) {
Activity.RESULT_OK -> {
val return_data = it.data?.getStringExtra("data_return")
Log.d("FirstActivity", "return data is $return_data")
}else -> {
}
}
}
....
....
button1.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity.launch(intent)
}
}
这样程序就没问题了