본문 바로가기

Android + Kotlin

[Android + Kotlin] startActivityForResult 의 Deprecated 를 해결하자.

반응형

startActivityForResult 가 Deprecated 가 되었고, callback 형태로 변경이 되었습니다.

기존에 onAcitivityResult() 함수가 Activity 안에서만 선언이 가능하여 Fragment 나 adapter의 item 등에서 사용하기가 어려웠고, 코드도 복잡했습니다.

이런 점에서 callback 으로 사용한다는 점에서는 크게 환영할 일입니다.

 

 

이제 어떻게 사용을 하는지 알아보겠습니다.

 


 

1. onActivityResult() 를 callback 으로 변경

 

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (resultCode) {
        RESULT_OK -> {
        ...
        }
    }
}

 

기존에는 위와같이 onActivityResult()를 사용했습니다.

이를 callback 으로 사용하는 코드입니다.

 

private val childForResult =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        when (result.resultCode) {
            RESULT_OK -> {
            ...
            }
        }
    }

 

위와 같이 사용을 할 수있습니다.

기존에는 requestCode가 있었지만, callback 에서는 activity 호출 부분에 1:1로 매칭하여 사용하므로 requestCode가 없습니다. (물론, 동일한 동작을 하는 화면 호출에는 callback을 함께 사용할 수 있습니다.)

 


 

2. Activity 의 호출 부분

기존에는 startActivityForResult() 를 이용하여 호출하였는데, callback는 launch를 사용합니다.

 

ChildAActivity.createIntent(this@ParentActivity, "A Child Callback OK!!").also {
    childForResult.launch(it)
}

 

위의 코드와 같이 callback.launch() 를 호출하면서 파라메터리 intent를 전달해주면 됩니다.

 


 

전체 코드는 아래 Github 링크를 확인해주세요.

 

GitHub - rcbuilders/RemindSampleApp: https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함.

https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함. - GitHub - rcbuilders/RemindSampleApp: https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함.

github.com

 

반응형