본문 바로가기
Android 개발/android :: Tip

[안드로이드 Activity] startActivityForResult 사용법 및 startActivity와 차이점

by 독학하는 1인 개발자 2020. 5. 28.

Android 개발 Tip.

 

- Activity Start Method

 

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

 

startActivityForResult

VS

StartActivity

 

 

 

 

 

 

 

일반적으로 Activity를 띄울 때는

 

startActivity()를 사용한다.

 

다른 방법으로는 startActivityForResult()도 있다.

 

 

 

startAcitivity와 비교하여 간단하게 정리해보자.

 

 

 

1. 용도 차이

 

startActivity : 새 액티비티를 열어줌 (단방향)

 

startActivityForResult : 새 액티비티를 열어줌 + 결과값 전달 (쌍방향)

 

 

즉, 결과값을 전달해주느냐 아니냐의 차이다.

 

 

Activity에서 resultCode를 보내서 원하는 기능을 수행할 수 있다.

 

 

 

2. 실행 코드

- MainActivity에서 -> SubActivity를 여는 경우

 

 

startActivity(Intent intent)

1
startActivity(new Intent(MainActivity.this, SubActivity.class));
cs

 

startActivityForResult(Intent intent, int requestCode)

1
startActivityForResult(new Intent(MainActivity.this, SubActivity.class), 0);
cs

 

 

끝에 인자 값으로 하나 더 들어가는 것을 볼 수 있다. ('0')

 

int형 requestCode인데 -> 원하는 숫자를 넣어주면 된다.

 

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

 

 

 

 

 

 

3. startActivityForResult 사용법 예제

 

1) startActivityForResult()

MainActivity에 작성한다.

 

MainActivity에서 SubActivity를 연다.

 

MainActivity.java

1
startActivityForResult(new Intent(MainActivity.this, SubActivity.class), 0);
cs

 

 

2) setResult()

SubActivity 종료 시점에 작성한다.

 

RESULT_OK 또는 RESULT_CANCEL을 보내도 된다.

 

SubActivity.java

1
2
setResult(RESULT_OK);
finish();
cs

 

 

3) onActivityResult()

MainActivity에 작성한다.

 

결과를 받는 곳이다.

 

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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){
        ...
    }
}
cs

 

requestCode: activity 식별 값

 

resultCode: setResult()에서 보낸 값

 

data: putExtra()를 이용하여 intent값도 보낼 수 있다.

 

 

 

정리. 

 

과정을 다시 정리해보자.

 

Step 1> SubActivity 실행.

Step 2> SubActivity 종료할 때 -> setResult() 실행

Step 3> MainActivity로 돌아오면서 -> onActivityResult()에 결과값 전달

 

 

 

 

 

 

 

 

댓글