Android registerForActivityResult

passΒ·2023λ…„ 7μ›” 22일
0

Android

λͺ©λ‘ 보기
20/36

πŸ”₯ Android μ—μ„œ Activity 에 callback μ μš©ν•˜κΈ°


πŸ—‘ startAcitivityForResult()

κ²°κ³Όλ₯Ό μœ„ν•œ ν™œλ™μ„ μ‹œμž‘ν•  λ•Œ λ©”λͺ¨λ¦¬ λΆ€μ‘±μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€μ™€ ν™œλ™μ΄ μ†Œλ©Έλ  수 μžˆμŠ΅λ‹ˆλ‹€. 특히 카메라 μ‚¬μš©κ³Ό 같이 λ©”λͺ¨λ¦¬λ₯Ό 많이 μ‚¬μš©ν•˜λŠ” μž‘μ—…μ˜ κ²½μš°μ—λŠ” μ†Œλ©Έλ  ν™•λ₯ μ΄ 맀우 λ†’μŠ΅λ‹ˆλ‹€.

기쑴에 μ‚¬μš©ν•˜λ˜ startAcitivityForResult λŠ” deprecated κ°€ λ˜μ—ˆλ‹€.
곡식 λ¬Έμ„œμ˜ λ‚΄μš©μ„ 확인해보면 λ©”λͺ¨λ¦¬ λΆ€μ‘±μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€μ™€ ν™œλ™μ΄ μ†Œλ©Έλ  수 μžˆλŠ” 이유라고 ν•œλ‹€.


πŸ“Œ registerForActivityResult

ComponentActivity λ˜λŠ” Fragment에 μžˆμ„ λ•Œ, Activity Result APIμ—μ„œ μ œκ³΅ν•˜λŠ” registerForActivityResult() APIλ₯Ό 톡해 κ²°κ³Ό μ½œλ°±μ„ 등둝할 수 μžˆλ‹€.

κ³΅μ‹λ¬Έμ„œμ— λ”°λ₯΄λ©΄ startActivityForResult κ°€ deprecated 되고, Activity callback 을 μœ„ν•΄ registerForActivityResult 의 μ‚¬μš©μ„ ꢌμž₯ν•˜κ³  μžˆλ‹€.
예제λ₯Ό 톡해 registerForActivityResult 의 μ‚¬μš©λ²•μ„ μ•Œμ•„λ³΄μž.


μ°Έκ³  : μ•ˆλ“œλ‘œμ΄λ“œ 곡식 λ¬Έμ„œ

https://developer.android.com/training/basics/intents/result?hl=ko



βœ” MainActivity.kt

val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
	// call back event
    if (result.resultCode == RESULT_OK){
		val intent = result.data
        // Handle the Intent (callback)
	}
}

override fun onCreate(savedInstanceState: Bundle?) {
	// ...
    binding.selectButton.setOnClickListener {
        val intent = Intent(this, SubActivity::class.java)
        launcher.launch(intent)
    }
}
  • registerForActivityResult() λ₯Ό λ³€μˆ˜ launcher 에 μ„ μ–Έν•œλ‹€.
  • 화면을 μ „ν™˜ν•  λ•Œ, startActivity() 와 λ™μΌν•˜κ²Œ Intent λ₯Ό μ„ μ–Έν•˜κ³ , launcher.launch() ν•¨μˆ˜ μ•ˆμ— intent λ₯Ό 두고 μ‹€ν–‰ν•œλ‹€.
  • μ˜ˆμ œμ—μ„œλŠ” resultCode κ°€ RESULT_OK 인지 ν™•μΈν•˜κ³ , Intent λ₯Ό 톡해 값을 μ „λ‹¬λ°›κ±°λ‚˜ callback event λ₯Ό ꡬ성할 μˆ˜λ„ μžˆλ‹€.

βœ” SubActivity.kt

// ν™”λ©΄ μ’…λ£Œ μ‹œ
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("message", "보낼 λ©”μ‹œμ§€")
setResult(RESULT_OK, intent)
finish()
  • 화면을 μ’…λ£Œν•  λ•Œ, Intent λ₯Ό μ„ μ–Έν•˜κ³ , setResult() ν•¨μˆ˜λ₯Ό 톡해 κ²°κ³Ό 사인을 보내쀀닀.
  • μ˜ˆμ œμ—μ„œλŠ” RESULT_OK 사인을 λ³΄λ‚΄μ£Όμ—ˆκ³ , intent 둜 데이터λ₯Ό 전달할 수 도 μžˆλ‹€.
  • λ§ˆμ§€λ§‰μ— finish() 둜 activity λ₯Ό μ’…λ£Œν•œλ‹€.



profile
μ•ˆλ“œλ‘œμ΄λ“œ 개발자 지망생

2개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 7μ›” 22일

쒋은 κΈ€ κ°μ‚¬ν•©λ‹ˆλ‹€. 자주 μ˜¬κ²Œμš” :)

1개의 λ‹΅κΈ€