[안드로이드 Activity] startActivityForResult 사용법

Jiyoon Chae·2021년 8월 7일
0

안드로이드

목록 보기
8/23

액티비티 실행시 값 전달 방법

startActivity vs startActivityForResult

  • startActivity : 새로운 액티비티 실행
  • startActivityForResult : 새로운 액티비티 실행 + 결과값 전달 (쌍방향)

즉, forResult를 쓰면 responseCode, resultCode를 통해 액티비티간의 상호 교류를 할 수 있다. 값을 받아서 원하는 처리를 할 수 있음!

<실행 코드>

  • MainActivity에서 > SubActivity를 여는 경우
  1. startActivity((intent: Intent)
val intent = Intent(this, SubActivity::class.java)
startActivity(intent)
  1. startActivityForResult(intent: Intent, requestCode: Int)
val intent = Intent(this, SubActivity::class.java)
startActivityForResult(intent,1000)

requestCode는 원하는 숫자를 넣어주면 된다.

여러 액티비티를 쓰는 경우, 어떤 Activity인지 식별하기 위한 값이다.

2-1. startActivityForResult() 로 액티비티를 실행 → 실행한 SubActivity에서 setResult()값을 종료 시점에 세팅한다.

  • setResult() : 액티비티 종료 시점에 작성. (RESULT_OK 또는 RESULT_CANCEL )
//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()에 결과값 전달

출처:https://jhshjs.tistory.com/49

profile
바닐라라떼 좋아☕

0개의 댓글