[Kotlin] registerForActivityResult

Subeen·2023년 12월 14일
0

Kotlin 문법

목록 보기
19/23

실행 순서
1. 로그인 화면에서 회원가입 버튼을 클릭한다.
2. 회원가입 화면에서 이름, 아이디, 비밀번호를 입력 한 후 회원가입 버튼을 클릭한다.
3. 로그인 화면으로 돌아올 때 아이디, 비밀번호가 자동으로 입력 된다.

registerForActivityResult

  • registerForActivityResult란 Activity 또는 Fragment에서 Activity Result API에서 제공하는 registerForActivityResult() API를 통해서 콜백을 등록할 수 있다.
  • registerForActivityResult()는 ActivityResultContract와 ActivityResultCallback을 가져와 다른 액티비티를 실행하는 데 사용할 ActivityResultLauncher를 반환한다.

SignInActivity.kt

  • 전역 변수로 ActivityResultLauncher에 대한 변수를 선언한다.
private lateinit var activityResultLauncher: ActivityResultLauncher<Intent>
  • registerForActivityResult메소드를 활용해서 ActivityLauncher를 만든다.
  • SignUpActivity에서 전달 한 데이터(아이디, 비밀번호)를 getStringExtra로 받는다.

    💡 registerForActivityResult는 initialization, onAttach(), onCreate()에 registerForActivityResult()를 호출해야 한다.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_in)

        editId = findViewById(R.id.etSignInId)
        editPwd = findViewById(R.id.etSignInPwd)

        activityResultLauncher = registerForActivityResult(
            ActivityResultContracts.StartActivityForResult()
        ) { result ->
            if (result.resultCode == RESULT_OK) {
                val receiveId = result.data?.getStringExtra("idFromSignUpActivity") ?: ""
                val receivePwd = result.data?.getStringExtra("pwdFromSignUpActivity") ?: ""

                editId.setText(receiveId)
                editPwd.setText(receivePwd)
            }
        }
    }
  • 데이터를 받아 올 SignUpActivity를 실행한다.
    fun doOnBtnClick(view: View) {
        when (view.id) {
			...
            R.id.btnMoveSignUp -> {
                val intent = Intent(this, SignUpActivity::class.java)
                activityResultLauncher.launch(intent)

            }
        }
    }

SignUpActivity.kt

  • 데이터를 전달 할 액티비티인 SignUpActivity에서 setResult를 등록한다.
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_up)

        val btnSignUp = findViewById<Button>(R.id.btnSignUp)
        btnSignUp.setOnClickListener {
            val editName = findViewById<EditText>(R.id.etSignUpName)
            val editId = findViewById<EditText>(R.id.etSignUpId)
            val editPwd = findViewById<EditText>(R.id.etSignUpPwd)

            if (editName.text.isEmpty() || editId.text.isEmpty() || editPwd.text.isEmpty()) {
                Toast.makeText(this, "입력되지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
            } else {
                val intent = Intent(this, SignInActivity::class.java).apply {
                    putExtra("idFromSignUpActivity", editId.text.toString())
                    putExtra("pwdFromSignUpActivity", editPwd.text.toString())
                }
                // setResult 등록 
                setResult(RESULT_OK, intent)
                if (!isFinishing) finish()
            }
        }

    }

참조
registerForActivityResult 사용방법

profile
개발 공부 기록 🌱

0개의 댓글