마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Bundle의 사용에 대해 정확한 개념을 설명해주세요!

+1 추천
열심히 독학중인 초보입니다. 선배님이 작성한 프로그램보고 분석중인데

Bundle b = getIntent().getExtras();
  if (b != null) {
   value = b.getString(***.@@@);
  }

에서 value는 String이고 ***클래스의 @@@도 String입니다.

***클래스에서 여러 String변수를 가지고오는데 모든값이 변수이름과 동일합니다.

열심히 찾아본결과 Bundle은 이전액티비티에서 새로운 액티비티로 전환되었을때 이전 액티비티의 상태정보를 가지고있다고 하더라구요. null인지아닌지 판단하는 이유는 알겠는데(이전에 진행상황여부를 판단하는거라 생각합니다), 저위에 getIntent().getExtras()가 정확히 어디서 무얼갖고오는지 궁금하네요.

첫줄부분도 검색을 해봤지만 액티비티전환간에 쓰인다고하고 다른설명들도 비슷하더라구요.

모든 액티비티를 둘러보고가져오는것인지.. b.getString도 setString도아닌데다가 단순한 글자를 가져온다는게 그안에 말그대로 String형태의 값이 저장되어있는데 변하는값도아닐뿐더러(final로 되어있더군요) 그걸가지고 이전여부판단을한다니 궁금합니다.

프로그램은 일정같이 제가 저장해놓은 시간에 알람이울리는 프로그램이구요, 알람을 설정해나가는 클래스들마다 저형식으로 가져다가 value값을 판단해서 설정이 완료되지않으면 뒤로가는버튼이 작동하지않게 되어있습니다.

명쾌한 설명좀 부탁드릴게요!

 

*수정

Bundle b = getIntent().getExtras();

  if (b != null) {
   value = b.getString(***.@@@);
  }
  if (value != null) {
   btn.setText(getString(R.string.textview));
  }

위와같이 가져온 value를 판단하는부분도 있습니다. value가 null이아니면 버튼의 텍스트를 바꿔줘요.

***과 @@@는 클래스명, String변수이름인데 길어서 보기쉽게 기호로바꿨습니다;
whity1ove (200 포인트) 님이 2013년 7월 3일 질문
whity1ove님이 2013년 7월 3일 수정

1개의 답변

+5 추천
 
채택된 답변
Bundle 은 Key-Value 쌍으로 이루어진 일종의 해쉬맵 자료구조입니다.

안드로이드 프레임워크 여러 곳에서 데이터를 서로 주고 받아야 할 때 자주 사용하는 자료구조이구요,

예를 들어, 찾아보신 것처럼 한 Activity 에서 다른 Activity 로 전달하고 싶은 데이터가 있을때도 이 Bundle을 사용하는데,

한 Activity에서 Intent 에 putExtras로 Bundle 데이터를 넘겨주고,

다른 Activity에서 getExtras로 데이터를 참조하는 방식입니다.

Bundle은 앞서 말씀드린대로 맵이기 때문에 여러개의 키-값 쌍을 가지고 있습니다.

내부에

<String key1, Integer value1>,

<String key2, String value2>,

<String key3, Long value3>...

이런식으로 String 키와 여러 타입의 값(정확히는 Parcelable을 구현하고 있는 타입)을 가질 수 있기때문에

int value1 = extra.getInt(key1),

String value2 = extra.getString(key2),

Long value3 = extra.getLong(key3)...

이런식으로 키로 값을 찾아 참조하는 방식을 사용합니다.

키는 변하지 않는 고정 상수값이기 때문에 보통 static final String으로 선언해놓고 참조하는 것이고요.
b22n (22,940 포인트) 님이 2013년 7월 3일 답변
whity1ove님이 2013년 7월 4일 채택됨
감사합니다 드디어 어느정도 틀이잡히네요.
도움많이되었습니다
...