즉, forResult를 쓰면 responseCode, resultCode를 통해 액티비티간의 상호 교류를 할 수 있다. 값을 받아서 원하는 처리를 할 수 있음!
<실행 코드>
val intent = Intent(this, SubActivity::class.java)
startActivity(intent)
val intent = Intent(this, SubActivity::class.java)
startActivityForResult(intent,1000)
requestCode는 원하는 숫자를 넣어주면 된다.
여러 액티비티를 쓰는 경우, 어떤 Activity인지 식별하기 위한 값이다.
2-1. startActivityForResult() 로 액티비티를 실행 → 실행한 SubActivity에서 setResult()값을 종료 시점에 세팅한다.
//SubActivity.kt
setResult(RESULT_OK);
finish();
2-2 MainActivity로 돌아왔을 때 result 값을 받을 수 있게 한다.
//MainActivity.kt
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == CHALLENGE_CANCEL_INTENT) {
finish()
}else{
return
}
}
→ 이번 프로젝트에서는 액티비티가 크게 2개여서 responseCode가 역할이 없었다. 만약 액티비티가 여러개인 경우에는 보낸 responseCode로 해당 액티비티에서 받은 result값인지 확실히 하기 위해 조건문을 두번 작성해서 예외처리를 해줘야한다.
<예시>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==0){
if (resultCode==RESULT_OK) {
Toast.makeText(MainActivity.this, "result ok!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "result cancle!", Toast.LENGTH_SHORT).show();
}
}else if(requestCode==1){
...
}
}
requestCode : activity 식별 값
resultCode: setResult()에서 보낸 값
data: putExtra()를 이용하여 intent값도 보낼 수 있다.
Step 1> SubActivity 실행.
Step 2> SubActivity 종료할 때 -> setResult() 실행
Step 3> MainActivity로 돌아오면서 -> onActivityResult()에 결과값 전달