Android
[Android] registerForActivityResult() 구현하기
조예_
2023. 8. 3. 19:23
registerForActivityResult()란?
Activity 또는 Fragment에서, Activity Result API에서 제공하는 registerForActivityResult() API를 통해서 결과 콜백을 등록할 수 있음. startActivityForResult 또는 onActivityResult의 개념이 registerForResultActivity로 변경이 되는 부분
registerForActivityResult() 사용 방법
기본 틀은 intent 사용법과 동일하나 조금씩 차이가 있다.!
* 데이터를 넘길 때 사용
class SignUpActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_up)
val id = findViewById<EditText>(R.id.edt_id)
val pw = findViewById<EditText>(R.id.edt_pw)
val btnSignUp = findViewById<Button>(R.id.btn_sign)
btnSignUp.setOnClickListener {
val homeIntent = Intent(this, SignInActivity::class.java)
.putExtra("id", id.text.toString())
.putExtra("pw", pw.text.toString())
// id, pw 정보를 SignInActivity로 보내주는 역할을 함
setResult(RESULT_OK, homeIntent)
finish()
}
}
}
* 데이터를 가져올 때 사용
class SignInActivity : AppCompatActivity() {
private lateinit var resultLauncher: ActivityResultLauncher<Intent>
private lateinit var id: EditText
private lateinit var pw: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_in)
id = findViewById(R.id.edt_id_sign_in)
pw = findViewById(R.id.edt_pw_sign_in)
val btnSignUp = findViewById<Button>(R.id.btn_sign_sign_in)
setResultSignUp()
//resultLauncher.launcher()를 통해 데이터를 받아올 Activity 실행해줌
btnSignUp.setOnClickListener {
val intent = Intent(this, SignUpActivity::class.java)
resultLauncher.launch(intent)
}
}
// 콜백 선언해줌
//콜백 선언한 값을 intent와 resultCode를 사용해 원하는 데이터를 가져오면 된다.
private fun setResultSignUp() {
resultLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == RESULT_OK) {
val resultId = result.data?.getStringExtra("id") ?: ""
val resultPw = result.data?.getStringExtra("pw") ?: ""
id.setText(resultId).toString()
pw.setText(resultPw).toString()
}
}
}
}
참고
registerForActivityResult는 initialization, onAttach(), onCreate()에 registerForActivityResult()를 호출해야 한다고 나와있습니다
https://developer.android.com/training/basics/intents/result?hl=ko