-
[Android] registerForActivityResult() 사용한 회원가입 & 로그인안드로이드 2024. 3. 21. 18:01
✏️ TIL(Today I Learned)
registerForActivityResult()를 사용해서 회원가입 화면에서 입력한 아이디와 비밀번호를 입력하고 완료 버튼을 눌러 로그인 화면으로 이동하면, 자동으로 입력되도록 구현했다.
// SignInActivity val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> if (result.resultCode == Activity.RESULT_OK) { val id = result.data?.getStringExtra("id") ?: "" val pwd = result.data?.getStringExtra("pwd") ?: "" idEt.setText(id) pwdEt.setText(pwd) } } // 회원가입 버튼 signupBtn.setOnClickListener { startForResult.launch(Intent(this, SignUpActivity::class.java)) }
startForResult는 ActivityResultContracts.StartActivityForResult()를 사용하여 다른 Activity를 시작하고 그 결과를 처리하기 위한 ActivityResultLauncher이다. 회원가입 버튼에서 클릭 이벤트가 발생하면 SignUpActivity를 시작하기 위한 Intent를 생성하고, 이를 startForResult를 통해 시작한다. 그후, result(ActivityResult 객체)가 도착하면 데이터를 처리하는 콜백 함수가 호출된다. ( -> 다음에 오는 부분이 콜백 함수의 본문)
// SignUpActivity // 회원가입 버튼 signupBtn.setOnClickListener { val name = nameEt.text.toString() val id = idEt.text.toString() val pwd = pwdEt.text.toString() if (name.isNotEmpty() && id.isNotEmpty() && pwd.isNotEmpty()) { Toast.makeText(this@SignUpActivity, "회원가입 성공", Toast.LENGTH_SHORT).show() val intent = Intent(this@SignUpActivity, SignInActivity::class.java) intent.putExtra("id", id) intent.putExtra("pwd", pwd) setResult(RESULT_OK, intent) finish() } else { Toast.makeText(this@SignUpActivity, "입력되지 않은 정보가 있습니다", Toast.LENGTH_SHORT).show() } }
SignUpActivity에서 SignInActivity로 이동하는 인텐트를 생성해 아이디와 패스워드 데이터를 넣었다.
setResult()는 현재 SignUpActivity를 시작한 SignInActivity에게 결과(resultCode와 Intent data)를 반환한다. finish()로 현재 액티비티가 종료되면서 SignInActivity에 result가 돌아오면 콜백함수가 실행된다. 그러면 로그인 화면에서 아이디와 비밀번호가 자동으로 입력되는 것이다.
📝 공부한 Kotlin 정리
Activity에서 result 가져오기
registerForActivityResult()
registerForActivityResult()는 안드로이드에서 Activity나 Fragment에서 다른 Activity나 fragment로부터 결과를 얻기 위해 사용되는 메소드이다. 이 API는 startActivityForResult() 및 onActivityResult() 메서드를 대체하여 더욱 쉽고 간편하게 결과를 처리할 수 있도록 해준다. registerForActivityResult()는 결과를 얻고자 하는 액션과 그에 따른 결과를 처리할 콜백 함수를 전달한다. 이 함수는 ActivityResultLauncher 인터페이스의 구현체를 반환하며, 이를 사용하여 결과를 처리할 수 있다.
(ActivityResultContract 및 ActivityResultCallback을 가져와서 다른 Activity를 실행하는 데 사용할 ActivityResultLauncher를 반환한다.)
StartActivityForResult contract
안드로이드에서 기본적으로 제공되는 contract 중 하나이다. 다른 Activity로 이동하고 그 Activity에서 수행한 작업에 대한 결과를 받는 데에 사용한다. 다른 Activity로 이동하기 위해 Intent를 사용하고, 그 결과를 받기 위해 ActivityResult를 사용한다. ActivityResult는 resultCode와 데이터(Intent)를 포함한다. 이러한 ActivityResult 객체를 처리하여, 요구에 맞게 애플리케이션의 동작을 변경할 수 있다.
공식 문서
'안드로이드' 카테고리의 다른 글
[Android] Selector 사용해서 Button 상태에 따라 버튼 디자인 변경하기 (state_pressed) (0) 2024.03.22 [Android] Button에 background drawable 적용 안 되는 문제 해결 (0) 2024.03.22 [Android] AAB(Android App Bundle)에서 구글 로그인이 안 되는 문제 해결 (0) 2024.03.21 [Android] Activity와 라이프사이클(Lifecycle) 생명주기, 4대 컴포넌트 (0) 2024.03.20 [Android] Activity와 인텐트(Intent) (0) 2024.03.20