개요
Activity 간 값을 전달하거나 받아야 하는 경우가 있다.
값을 전달하는 방법은 Intent에 putExtra로 값을 전달할 수 있다.
그러면 호출한 엑티비티가 종료될 때 해당 엑티비티에서 처리한 값은 어떻게 받을 수 있을까?
startActivityForResult 함수를 사용하여 값을 받을 수 있었지만 deprecated 되어 사용을 권장하지 않는다.
그러므로 registerForActivityResult 함수를 통해 콜백을 등록하는 방법을 사용해야한다.
어떤 방법인지 살펴보자.
콜백 등록
private lateinit var result: ActivityResultLauncher<Intent>
result = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
if (it.resultCode == Activity.RESULT_OK){
...
}
}
button.setOnClickListener {
val mainIntent = Intent(this, SecondActivity::class.java)
mainIntent.putExtra("testValue","Good")
result.launch(mainIntent)
}
registerForActivityResult 함수로 콜백을 등록한 뒤 launch를 통해 다음 엑티비티를 실행시킨다.
값을 전달하고 싶다면 putExtra 함수를 이용한다.
값 전달받기
val testValue = intent.getStringExtra("testValue")
Log.d("SecondActivity", testValue!!)
val secondIntent = Intent()
secondIntent.putExtra("testValue","Wow")
setResult(RESULT_OK, secondIntent)
finish()
호출된 엑티비티에서 전달받은 값을 확인할 수 있다.
엑티비티를 종료하고 setResult 함수를 통해 현재 엑티비티를 호출한 이전 엑티비티에 값을 전달해주겠다.
엑티비티 종료 후 종료된 엑티비티에서 값 전달받기
result = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
if (it.resultCode == Activity.RESULT_OK){
val testValue = it.data?.getStringExtra("testValue")
Log.d("MainActivity", testValue!!)
}
}
getStringExtra로 값을 받아올 수 있다.
it.data 를 사용하면 setResult 에서 전달한 Intent를 불러올 수 있다.
마무리
호출한 엑티비티 간 데이터 값 전달방법을 알아보았다.
인턴 업무 진행 중 사용한 부분이라 정리해보았다.
'개발 > Kotlin & Android' 카테고리의 다른 글
[Kotlin & Android] 코틀린 for 문 사용법 (0) | 2021.12.12 |
---|---|
[Kotlin & Android] 코틀린 전역 변수 선언 (다른 엑티비티 변수 사용하기) (0) | 2021.12.01 |
[Kotlin & Android] Android 지속적인 음성인식 기능 구현 (SpeechRecognizer) (0) | 2021.10.28 |
[Kotlin & Android] Android SpeechRecognizer API 구현하기 (음성을 텍스트로 변환 - STT변환) (0) | 2021.10.28 |
[Kotlin & Android] 포그라운드 서비스 (Foreground Service) (2) | 2021.10.28 |