
호출하는 액티비티는 데이터를 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)
💪💪