startActivityForResult失效,以及registerForActivityResult使用閃退、奔潰問題
阿新 • • 發佈:2022-03-14
在學第一行程式碼第三版的時候,向下一個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) } }
這樣程式就沒問題了