|
안드로이드(Android) activity 에서 activity 로 Object 넘기기 |
|
개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2 |
Activity 로 데이터를 전달하기 위해서 쓰이는 방법에 대한 기술이다.
결과값을 받지 않는 경우와 결과값을 받는 두가지 경우가 있는데
비동기로 이루어지고 있다. 결과값을 받는 경우는 어떻게 처리 하는지
간단하게 예제를 통해 보여준다.
|
1. activity 로 결과값 전송하기 |
하나의 activity 에서 다른 activity 를 실행할 때 필요한 데이터를 넘기는 경우가
있다. 이럴때 getter, setter 가 있는 VO 객체를 만든후 넘긴다.
이번 예제는 파일 브라우저에서 txt 파일을 클릭해서 다른 activity 로 넘길 때
파일 정보를 넘기는 것이다.
import java.io.Serializable;
public class FileInfo implements Serializable {
private static final long serialVersionUID = 1L;
private String absolutePath;
private String filename;
private boolean bFile; // 파일인지 폴더인지 구분
public String getAbsolutePath() {
return absolutePath;
}
public void setAbsolutePath(String absolutePath) {
this.absolutePath = absolutePath;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public boolean isbFile() {
return bFile;
}
public void setbFile(boolean bFile) {
this.bFile = bFile;
}
}
다음은 VO 객체를 보내는 곳의 소스이다.
Intent 객체를 new 로 생성할 때 첫번째 파라미터로 보내는곳의 Acvitity , 두번째
파라미터로 받는 곳의 Activity 를 추가해서 생성한다.
intent 함수중에 putExtra를 이용해서 보내게 된다. 함수의 종류를 보게
되면 다양하고 많은 것들이 있음을 알수 있다. Object 를 보내게 되면 받는 곳에서
캐스팅 하면 된다. 마지막에 startActivity 함수를 호출해 준다.
FileInfo fileInfo = new FileInfo();
fileInfo.setAbsolutePath(aDirectory.getAbsolutePath());
fileInfo.setFilename(aDirectory.getName());
fileInfo.setbFile(true);
Intent intent = new Intent(AndroidFileBrowser.this, FileTextView.class);
intent.putExtra("fileText", fileInfo);
startActivity(intent);
호출을 하였으니 이제 받는 Activity 에서 어떻게 해야 하는지 보도록 하자.
받는 곳에서는 getIntent() 함수를 이용해 Intent 객체를 리턴받는다.
그리고 Intent 함수중에 getSerializableExtra 를 이용해 전달한 오브젝트를
캐스팅해 받는다.
// 다른 Activity 에서 전달해준 Intent 를 받는다
Intent intent = getIntent();
FileInfo fileInfo = (FileInfo)intent.getSerializableExtra("fileInfo");
|
2. activity 로 데이터 전송후 결과값 리턴받기 |
다음은 객체를 전달하고 전달한 Activity 로부터 결과값을 받는 방법은 무엇일까?
전달만 해주고 나 몰라라 해주면 좋겠지만 그 결과값을 알아야 하는 경우가
많다. 그럴때는 Intent 를 보내는 startActivity 가 아닌 startActivityForResult 를
사용하면 된다.
호출을 하였으면 전달 받을 함수가 있어야 한다. 그 함수가 onActivityResult 이다.
Override 해서 함수안에 필요한 기능을 넣자.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 결과 값을 전달 받는다.
String ret = data.getStringExtra("retVal"); //다시 받온 값을 여기서 처리한다.
Log.d("return msg", ret);
super.onActivityResult(requestCode, resultCode, data);
}
파라미터의 Intent data 로부터 결과값을 받을수 있다. 아래 소스에서 보면
다 처리한후 결과값을 "success" 를 보냈다. 그러면 데이터를 보낸쪽으로 받은
결과로 로그에 "success" 가 찍힐 것이다.
받는 Activity 에서 Intent 를 설정하고 종료하는 소스이다.
setResult 파라미터로 RESULT_OK 를 넘겨준다. 그리고 finish() 를 호출해
Activity 종료하면 이전 호출한 곳으로 넘어가게 된다.
// 다른 Activity 에서 전달해준 Intent 를 받는다
Intent intent = getIntent();
FileInfo fileInfo = (FileInfo)intent.getSerializableExtra("fileInfo");
// 받고 리턴해주면서 종료한다
Intent retIntent = new Intent();
retIntent.putExtra("retVal", "success");
setResult(RESULT_OK,retIntent);
finish();
'안드로이드 개발' 카테고리의 다른 글
| 안드로이드(Android) 이클립스와 스마트폰 갤럭시 S 의 연결 (1) | 2014.02.17 |
|---|---|
| 안드로이드(Android) 이클립스와 갤럭시S3 의 연결을 위한 개발자 디버깅 설정 (7) | 2014.02.16 |
| 안드로이드(Android) DrawerLayout 사용하여 멀티윈도우 만들기 (3) | 2014.01.12 |
| 안드로이드(Andriod) 에서 다양한 네트워크 연결 및 데이터 받기 (1) | 2013.12.29 |
| 안드로이드(Android) 에서 ViewFlipper 을 이용해 화면 애니메이션 구현하기 (0) | 2013.11.24 |
| 안드로이드(Android) SeekBar 위젯을 이용해 화면 밝기 조정하기 (0) | 2013.10.28 |
| 안드로이드(android) WebView 페이지 이동과 웹에서 다운받은 파일 SDCARD 에서 확인 (0) | 2013.10.21 |
| 안드로이드(Android) ProgressBar 진행바 구현하기 (4) | 2013.10.19 |
