registerForActivityResult 사용법

jericho·2023년 12월 14일

Android

목록 보기
1/15
post-thumbnail

호출하는 액티비티는 데이터를 intent에 담아서 넘기면 되는데
호출받은 액티비티는 만들어 넘길 intent가 없으므로 호출받으면서 받은 intent에 넣고 호출한 액티비티가 꺼내써야한다. 이 때 꺼내쓰려고 계약?을 정하고, 넘겨받았을 때 뭘 할지를 콜백함수로 써놓는 것이다.

// 호출하는 액티비티 클래스에다 런처 변수를 만든다.
// (온클릭 함수에다 만들면 터진다)
val resultLauncher =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        if (it.resultCode == Activity.RESULT_OK) {
            val etid = findViewById<EditText>(R.id.et_id)
            val etpw = findViewById<EditText>(R.id.et_password)
            etid.setText(it.data?.getStringExtra("id") ?: "")
            etpw.setText(it.data?.getStringExtra("password") ?: "")
        }
    }


// 버튼 눌렀을 때 온클릭 함수에서
// intent는 똑같이 만들고, startActivity 대신 런처 변수를 launch 한다.
val intent = Intent(this, SignUpActivity::class.java)
resultLauncher.launch(intent)
// 호출받은 액티비티에서는 intent에 똑같이 데이터 집어넣고
// setResult 해서 OK 싸인을 줘야한다.
// (OK 검사 상관없이 setResult를 안하면 데이터가 안받아진다)
// (런처에 작동 명령을 주는 역할인걸까?)
intent.putExtra("id", etid.text.toString())
intent.putExtra("password", etpw.text.toString())
setResult(RESULT_OK, intent)

1개의 댓글

comment-user-thumbnail
2023년 12월 14일

💪💪

답글 달기