goodbye? onActivityResult...
Android2020. 5. 14. 00:36
android개발하다 보면 onActivityResult로 결과를 받아오는 경우가 많습니다.
A activity에서 B activity로 startActivityForResult 로 호출 후, B activity에서의 결과를 onActivityResult로 받게 되죠.
그런데,
implementation 'androidx.activity:activity-ktx:1.2.0-alpha04'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha04'
에서 다른 기능이 생겼습니다.
호출과 동시에 lambda function으로 다로 onActivityResult로 결과를 받지 않아도 됩니다.
일반적인 방법으로는
Intent(this@MainActivity, SubActivity::class.java).run {
startActivityForResult(this, REQUEST_CODE_SUBACTIVITY)
}
와 같은 방법으로 호출하면,
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_CODE_SUBACTIVITY -> {
if (resultCode == Activity.RESULT_OK) {
val resultValue = data?.getStringExtra("result") ?: ""
binding.textCallback.text = resultValue + " Normal"
}
}
}
}
와 같이 결과를 받습니다.
그런데, activity-ktx:1.2.0-alpha, fragment-ktx:1.3.0-alpha에 추가된 방법으로 한다면
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
when (it.resultCode) {
Activity.RESULT_OK -> {
val resultValue = it.data?.getStringExtra("result") ?: ""
textCallback.text = resultValue + " KTX"
}
Activity.RESULT_CANCELED -> {
}
}
}.launch(
Intent(this@MainActivity, SubActivity::class.java)
)
와 같이 진행할 수 있습니다.
onActivityResult의 override된 mehtod로 결과를 받지 않아도... 간결화된 코드로 가독성이 좋아졌다고 볼 수 있습니다.
StartActvityForResult이외에
StartActivityForResult
StartIntentSenderForResult
RequestMultiplePermissions
RequestPermission
TakePicturePreview
TakePicture
TakeVideo
PickContact
GetContent
...
'Android' 카테고리의 다른 글
kotlin 코드 실행시간 측정하기. (0) | 2020.05.17 |
---|---|
kotlin Collection vs Sequense (0) | 2020.05.15 |
kotlin file read... (0) | 2019.04.17 |
UnknownServiceException: CLEARTEXT communication to not permitted by network security policy (0) | 2019.02.26 |
AndroidStudio에서 File Template이용하기. (0) | 2016.06.14 |