Development/Android

[Android / Kotlin] registerForActivityResult() 사용해보기

SeungYong.Lee 2023. 1. 1. 18:58
반응형

원래 안드로이드에서는 Activity로부터 결과 값을 수신 받을 때,

startActivityForResult(), onActivityResult()를 사용했지만 deprecated 되었습니다.

이에 따라 공식문서에서 제안한 새로운 방식인 registerForActivityResult()를 사용해보겠습니다.

 

private lateinit var resultLauncher: ActivityResultLauncher<Intent>

먼저, MainActivity에서 값을 제네릭으로 처리해줄 Launcher 인스턴스 변수를 생성합니다.

Intent 객체를 전달받기 위해 Intent를 제네릭에 명시해주었습니다.

 

nextBtn.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)
    resultLauncher.launch(intent) // startActivityForResult 랑 동일한 기능 이다.
}

값을 얻어올 SecondActivity에 대한 Intent 변수를 launch() 메서드와 함께 선언합니다.

 

backBtn.setOnClickListener {
    if (inputName.text.isNullOrBlank()) {
        Toast.makeText(this, "이름 입력해주세요", Toast.LENGTH_SHORT).show()
        return@setOnClickListener
    }
    intent.putExtra("name",inputName.text.toString())
    setResult(RESULT_OK,intent)
    finish()
}

이동한 SecondActivity에서는 저희가 다루어야할 실제 값들을 옮겨줄 처리를 진행합니다.

 

resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val name = it.data?.getStringExtra("name") ?: ""
        textName.text = "이름 : $name"
    }
}

다시 MainActivity로 복귀했을 시, 값을 확인하기 위한 콜백을 기존의 launcher 변수를 통해 선언하여,

Activity간의 값 전달, 결과를 확인할 수 있습니다.

 

참고 ->

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

반응형