이런 과제가 있었는데 아래와 같이 구현하도록 요구사항이 주어졌다.
registerForActivityResult 을 알아보라는 hint가 있어서
이것이 안드로이드다 with 코틀린 책에서
해당 개념을 찾아보았다.
registerForActivityResult를 사용하면 내가 만든 액티비티 이외에도 사용하는 컨트랙트(Contract)의
종류에 따라서 카메라, 갤러리와 같이 안드로이드가 기본적으로 제공하는 기능을 사용할 수 있다.
일반적으로 registerForActivityResult()에 정해진 컨트랙트를 담아서 호출하면 ActivityResultLauncher가 생성되는데
기본적인 흐름은 아래 그림과 같다.
registerForActivityResult()에 ActivityResultContracts를 입력하면 입력된 컨트랙트의 종류에 따라서 ActivityResultLauncher의 제네릭 타입이 결정된다. 위의 그림과 같이 생성과 동시에 activityResult 변수에 저장할 때는 타입이 자동으로 결정되지 때문에 신경쓰지 않아도 되지만, 프로퍼티와 같이 적역변수로 미리 선언할 때는 ActivityResultContracts의 종류에 따라서 변수 타입의 제네릭 또한 변경된다.
나는 ActivityResultContracts의 종류중에서
액티비티의 결과값을 받는 컨트랙트를 이용하였다. =>StartActivityForResult
그 외 여러개의 컨트랙트가 있다.
코드는 https://velog.io/@ho-taek/Android-registerForActivityResult%EB%9E%80
[Android] registerForActivityResult()란?
! 기존에 데이터 주고 받을 때 사용했던 startActivityForResult()가 derpecated 됐고, 다른 방법을 찾아보다가 registerForActivityResult()에 대해 알게 되었다!! 그 사용법에 대해 간단하게 알아보자 <img src =h
velog.io
해당 블로그에서 설명이 잘되어있어서 참고를 하였다.
먼저 SignUpActivity.kt 파일에서 회원가입버튼을 클릭한 후 SignInActivity.kt 파일로 id와 pw를 갖고 가야하기에
intent에 담아서 보냈다.
private fun navigateToSignUp() {
val intent = Intent(this,SignInActivity::class.java)
intent.putExtra("id",editId.text.toString())
intent.putExtra("pw",editPw.text.toString())
setResult(RESULT_OK,intent)
finish()
}
SignInActivity에서는 키값으로 데이터를 받는다.
// 회원가입 화면에서 결과를 처리하는 함수
private fun setResultSignUp() {
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
data?.let {
val id = it.getStringExtra("id") ?: ""
val pw = it.getStringExtra("pw") ?: ""
editId.setText(id)
editPw.setText(pw)
}
}
}
}
해당 개념을 나중에 db연결했을때, 데이터를 주고 받는과정과 연관시키면 재밌을것 같다.
'과제 > 앱개발입문과제' 카테고리의 다른 글
앱개발 입문과제#2 (0) | 2024.03.19 |
---|---|
앱개발입문과제#1 (0) | 2024.03.19 |