인텐트(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;
}
}
'MOBILE' 카테고리의 다른 글
Android SharedPreferences 사용 예제 (0) | 2016.08.21 |
---|---|
알림창 띄우기(Multi Choice, Single Choice) (0) | 2016.08.21 |
안드로이드 뒤로가기 버튼 더블클릭해서 앱 종료하기 (0) | 2016.08.21 |
안드로이드 구글 애드몹 전면광고 넣기 (0) | 2016.08.21 |
SharedPreferences란? (0) | 2016.08.21 |
[Android Intent Useage] 안드로이드 Intent 사용 방법 (0) | 2016.08.21 |
Android Intent - 안드로이드 인텐트 (0) | 2016.08.21 |
Mediaplayer 로 지정되어있는 벨소리 재생하기 (0) | 2016.08.21 |
댓글