개발 창고/Android

[Kotlin] How to Replace "registerForActivityResult"

로이제로 2023. 12. 8. 22:00
반응형

 

오랜만에 안드로이드 개발을 하려고 보니, startActivityForResult가 Deprecated가 되었습니다.

startActivityForResult가 Deprecated되었다는 안내

그러면 어떻게 동일한 결과를 받아 와야 할까 하고 찾아보니 registerForActivityResult를 선언하여 사용하는 방법입니다.

 

1. Callback 변수 생성

// Callback 변수
private val callback =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        when (result.resultCode) {
            RESULT_OK -> {
                // TODO
            }
        }
    }

registerForActivityResult로 callback 변수를 생성해줍니다.

 

2. Activity 이동 실행

만약 FromActivity에서 ToActivity로 이동하는 변수라고 한다면

// FromActivity.kt
callback.launch(Intent(this, ToActivity::class.java))

이렇게 하면, From Activity에서 ToActivity로 이동하며, ToActivity가 종료되는 시점에 callback에서 결과를 반환받게 됩니다.

 

3. 결과 반환

// ToActivity.kt
intent.putExtra("result", "success")
setResult(RESULT_OK, intent)

finish()

위와 같이 이동한 Activity인 ToActivity에서 setResult후 finish()되면, FromActivity의 callback에서 위의 결과를 받아들이게 됩니다.

 

4. Callback 처리

// FromActivity.kt

// Callback 변수
private val callback =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        when (result.resultCode) {
            RESULT_OK -> {
                print(result.data!!.getStringExtra("result"))
            }
        }
    }
반응형