startActivityForResult 가 Deprecated 가 되었고, callback 형태로 변경이 되었습니다.
기존에 onAcitivityResult() 함수가 Activity 안에서만 선언이 가능하여 Fragment 나 adapter의 item 등에서 사용하기가 어려웠고, 코드도 복잡했습니다.
이런 점에서 callback 으로 사용한다는 점에서는 크게 환영할 일입니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif)
이제 어떻게 사용을 하는지 알아보겠습니다.
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
'Android + Kotlin' 카테고리의 다른 글
[Android + Kotlin] Android Studio에서 Release로 빌드하여 단말에 실행하기 (0) | 2022.06.16 |
---|---|
[android + Kotlin] Runtime에 View 속성 확인 라이브러리 (for 디자이너 협업) (0) | 2022.05.30 |
[Android + Kotlin] LifecycleEventObserver, DefaultLifecycleObserver 를 사용해보자. (0) | 2022.05.06 |
[Android + Kotlin] sortedWith() 로 멀티 조건 정렬을 해보자. (0) | 2022.05.03 |
[Android + Kotlin] 날짜/시간 <-> currentTimeMillis 변환 및 format 표시 (1) | 2022.03.29 |