인텐트(Intent)를 사용할 때 데이터를 전달하는 방법에 대해서 이야기 하겠다.
Intent로 다른 Activity(예, AnotherActivity.class)를 실행시킬 때는 다음과 같이 한다.
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class); startActivity(intent); |
그런데, 여기에 추가로 AnotherActivity 데이터를 전달하고 싶을 때가 있다.
이때 사용할 수 있는 것이 putExtra() 다.
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class); intent.putExtra("name", "rio");
intent.putExtra("age", 10);
startActivity(intent); |
그리고, AnotherActivity에서는 다음과 같이 getExtras()를 이용해서 데이터를 받을 수 있다.
(바로 데이터를 받을 것이므로 보통은 onCreate() 메서드에 구현 한다.)
Intent intent = getIntent(); String name = intent.getExtras().getString("name");
int age = intent.getExtras().getInt("age");
|
(*** 참고 1 ***)
startActivity() 가 아니고 startActivityForResult()를 사용한다면 다음과 같이 하면 된다.
public static final int REQUEST_CODE = 1001;
....
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class); intent.putExtra("name", "rio");
intent.putExtra("age", 10);
startActivityForResult(intent, REQUEST_CODE); ....
protected void onActivityResult(int requetCode, int resultCode, Intent Data) { super.onActivityResult(requestCode, resultCode, Data); if(requestCode == REQUEST_CODE) { if(resultCode == RESULT_OK) { String phoneNumber = data.getExtras().getString("phoneNumber"); } } } |
AnotherActivity에서 데이터를 넣는 부분을 보면
Intent resultIntent = new Intent(); resultIntent.putExtra("phoneNumber", "010-1234-5678"); setResult(RESULT_OK, resultIntent); |
이 코드는 Activity 간의 데이터 전달을 가능하게 하는 코드이므로 유용하게 사용될 수 있다.
(REQUEST_CODE, RESULT_OK 부분에는 임의의 integer 값을 넣어도 된다.)
(*** 참고 2 ***)
startActivityForResult()와 setResult() 코드를 좀 더 고치면 다음과 같다.
상황 : 하나의 Activity에서 여러 Activity로 데이터를 주고 받아야 할 경우
public static final int REQUEST_CODE_FOR_ACTIVITY_1 = 1001; public static final int REQUEST_CODE_FOR_ACTIVITY_2 = 1002; ....
startActivityForResult(intent, REQUEST_CODE_ACTIVITY_1); startActivityForResult(intent, REQUEST_CODE_ACTIVITY_2); ....
protected void onActivityResult(int requetCode, int resultCode, Intent Data) { super.onActivityResult(requestCode, resultCode, Data); switch (requestCode) { case REQUEST_CODE_ACTIVITY_1: if(resultCode == RESULT_OK && Data != null) { // 결과가 OK 일 때 할일 }else if(resultCode == RESULT_CANCELED) { // 결과가 CANCEL 일 때 할일 } break; case REQUEST_CODE_ACTIVITY_2: if(resultCode == RESULT_OK && Data != null) { // 결과가 OK 일 때 할일 break; } } |
'Programming > Android' 카테고리의 다른 글
[안드로이드] Phone & Tablet Stencils (0) | 2014.09.16 |
---|---|
안드로이드 개발자를 위한 10대 오픈소스 안드로이드(2D,3D)게임엔진 (0) | 2014.08.19 |
[UI] Navigation Drawer, SlidingMenu의 대체 라이브러리 (0) | 2014.07.29 |
카카오톡 UI의 비밀, ViewPagerIndicator (0) | 2014.07.29 |
[안드로이드] Preference – UI 정보, 간단한 변수 저장하기 (0) | 2013.11.14 |