안드로이드에서 사후 처리 여부에 따라 인텐트로 액티비티를 시작하는 방법은 다음 3가지로 나뉜다.
contact -> ActivityResultLauncher -> launch
registerForActivityResult() 함수로 만드는 객체이며 함수의 매개변수에 실제 작업자인 Contract 객체와 결과를 처리하는 Callback 객체를 등록해 줌
launch
ActivityResultLauncher의 함수이며 launch 함수를 호출하는 순간 ActivityResultLauncher에 등록된 contract 객체가 실행됨
지금까지 설명한 내용을 바탕으로 실제 인텐트를 발생시켜 액티비티를 실행하고 결과를 처리하는 방법을 살펴보겠습니다.
val requestLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()) //contract
{ //Callback
val resultData = it.data?.getStringExtra("result")
binding.mainResultView.text = "result : $resultData"
}
...
ActivityResultLauncher를 이용하려면 먼저 registerForActivityResult() 함수로 ActivityResultLauncher를 객체를 만들어야 함. registerForActivityResult() 함수에는 Contract와 Callback 객체를 등록해야 하며 여기서는 인텐트를 발생시키는 StartActivityForResult 객체를 사용.
이렇게 만든 ActivityResultLauncher 객체를 launch() 함수로 실행
val intent: Intent = Intent(this, DetailActivity::class.java)
requestLauncher.launch(intent)