registerForActivityResult API

박용석·2023년 8월 10일
0

회원가입을 하는 화면에서 회원가입 버튼을 클릭시 로그인 화면으로 넘어갈 때 데이터를 전달해 줄 수 있는 registerForActivityResult를 사용해 보자

로그인화면
SignInActivity.kt

class SignInActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
		val et_login = findViewById<EditText>(R.id.et_login)
        val btn_join = findViewById<Button>(R.id.btn_join)
        
        val signUpActivityLauncher =
            registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
                if (it.resultCode == RESULT_OK) {
                    val data: Intent? = it.data
                    val subIdTextValue = data?.getStringExtra("id")
                    val subPwTextValue = data?.getStringExtra("pw")

                    subIdTextValue?.let {
                        et_login.setText(it)
                    }

                    subPwTextValue.let {
                        et_pw.setText(it)
                    }
                }
            }
            btn_join.setOnClickListener {
            val intent = Intent(this, SignUpActivity::class.java)
            signUpActivityLauncher.launch(intent)
        }
    }
}

registerForActivityResult 메서드를 사용해서 ActivityLauncher를 만든다.
조건문이 만족하면 "id" 와 "pw"를 받아와서 editText인 et_login 과 et_pw에
setText로 값을 전달받아 넣어준다.
signUpActivityLauncher.launch(intent)를 통해 데이터를 받아올 signUpActivity를 실행했다.

회원가입화면
SignUpAcitivity.kt

class SignUpActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_up)
        
        var btn_join2 = findViewById<Button>(R.id.btn_join2)
        var et_name = findViewById<EditText>(R.id.et_name)
        var et_id2 = findViewById<EditText>(R.id.et_id2)
        var et_pw2 = findViewById<EditText>(R.id.et_pw2)
        
        btn_join2.setOnClickListener {
            if (et_name.text.toString().trim().isEmpty() || et_id2.text.toString().trim()
                    .isEmpty() || et_pw2.text.toString().trim().isEmpty()) {
                Toast.makeText(this, "입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
            } else {
                val intent = Intent(this, SignInActivity::class.java).apply {
                    putExtra("id", et_id2.text.toString())
                    putExtra("pw", et_pw2.text.toString())
                }
                setResult(RESULT_OK, intent)
                finish()
            }
        }
    }
}

회원가입 버튼을 누르면 if문을 넣어서 editText 3개의 값 중 한개라도 채워지지 않으면 Toast 알림창만을 띄우며 모든 값을 채워넣고 버튼을 누르면 putExtra에 아이디 패스워드를 입력받아 setResult 결과 값을 전달한다. 그럼 로그인 화면에서는 name "id", "pw"로 전달받은 값을 수신하게 된다.

다양한 사용방법에 익숙해지도록 열심히 공부해야겠다.

Android Developers

profile
슬기로운 개발 활동

3개의 댓글

comment-user-thumbnail
2023년 8월 10일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 8월 11일

오.. signinactivity를 이렇게 간결하게 짤 수도 있군요!!! 배워갑니다 ㅎㅎㅎㅎ 👍👍

답글 달기
comment-user-thumbnail
2023년 8월 11일

ㅠㅠㅠ registerForActivityResulte를 덕분에 잘 알아갑니다!!
개인과제에 꼭 넣어서 실행해볼게요ㅠㅠㅠ
글 작성해주셔서 정말 감사합니다!!

답글 달기