在學第一行代碼第三版的時候,向下一個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)
}
}
這樣程序就沒問題了
