안드로이드의 Activity들은 startActivityForResult()라는 메소드를 통해 sub activity를 만들고 Activity끼리 서로 데이터를 교환할 수 있다.
그 사이에는 'extra'라고 하는 통로가 존재하는데, 이 부분을 잘 알아야 한다.
Activity A가 Activity B를 서브 엑티비티로서 부르고 그로부터 결과값인 데이터를 전송받기 위해서는 어떻게 해야 할까?
먼저 삽화를 통해 기본 원리를 파악해보도록 하자.
다음과 같은 원리이다.
Activity A가 startActivityForResult를 통해서 Activity B를 호출하면,
B는 종료가 되면서 Result 값을 통해 Extra 꾸러미를 넘긴다.
그러면 Activity는 Extra 꾸러미 안에 있는 데이터들을 꺼내서 사용할 수 있는 것이다.
그렇다면 실제 구현 과정에서 어떤 작업들을 해주어야 하는지 살펴보자.
[Activity A 사이드]
Activity A에서 구현되어야 할 부분은,
첫째, int값의 requestCode 값을 설정해준다.
둘째, Intent를 만들어 Activity B를 실행시킨다.
셋째, onActivityResult()를 통해 각 requestCode값에 해당하는 결과값을 받아온다.
[Activity B 사이드]
Activity B에서 구현되어야 할 부분은,
첫째, Intent를 만들어 데이터 꾸러미를 Intent에 추가시킨다.
둘째, 결과값을 보내면서 Extra 꾸러미를 가지고 있는 Intent를 함께 넘겨준다.
간단하지 않은가? 그럼 코드에서는 이와같은 것들이 어떻게 구현이 될까?
[Activity A 사이드]
private static final int B_ACTIVITY = 0;
public void onCreate(){
...
Intent a_i = new Intent(this, B.class);
startActivityForResult(a_i, B_ACTIVITY);
...}
public void onActivityResult(int requestCode, int resultCode, Intent intent){
super.onActivityResult(requestCode, resultCode, intent);
switch(requestCode){
case B_ACTIVITY: // requestCode가 B_ACTIVITY인 케이스
if(resultCode == RESULT_OK){ //B_ACTIVITY에서 넘겨진 resultCode가 OK일때만 실행
intent.getExtras.getInt("data"); //등과 같이 사용할 수 있는데, 여기서 getXXX()안에 들어있는 파라메터는 꾸러미 속 데이터의 이름표라고 보면된다.
}
}
}
[Activity B 사이드]
Bundle extra;
Intent intent;
onCreate(){
...
extra = new Bundle();
intent = new Intent(); //초기화 깜빡 했다간 NullPointerException이라는 짜증나는 놈이랑 대면하게 된다.
...
extra.putInt("data", 1);
intent.putExtras(extra);
this.setResult(RESULT_OK, intent); // 성공했다는 결과값을 보내면서 데이터 꾸러미를 지고 있는 intent를 함께 전달한다.
this.finish();
}
이와 같이 하면 B 사이드에서 1이라는 데이터값을 가지고 있는 "data"라는 이름표의 꾸러미는 Activity A로 결과값으로써 전달이 되고, 사용이 될 수 있는 것이다.
나는 Bundle을 이용해서 했는데 번들을 사용하지 않고도 결과값을 보내기 위한 메소드는 있다고 본다. 이거는 API를 보면 쉽게 파악할 수 있다.
또한 int값 말고도 모든 데이터 변수들을 보낼 수 있어, 그것에 대한 걱정은 하지 않아도 된다.
[출처] [Android] startActivityForResult(), onActivityResult() 사용하기|작성자 소녕
'안드로이드' 카테고리의 다른 글
TextView - SpannableStringBuilder 를 이용한 스타일 설정 [출처] TextView - SpannableStringBuilder 를 이용한 스타일 설정 |작성자 김동학 (0) | 2011.02.08 |
---|---|
onUserInteraction(), onUserLeaveHint() (0) | 2011.02.07 |
RINGTONE_PICKER 호출시 직접 구현한 App 리스트 목록으로 나타내기 (0) | 2011.02.07 |
Conversion to Dalvik format failed with error 2 (0) | 2011.02.07 |
Conversion to Dalvik format failed with error 1 (0) | 2011.02.07 |