[Intent #2] Activity간 정보 전달 [Parcelable]
반응형
Activity간에 정보를 전송할때 객체를 전달해야되는 경우에 사용된다.
전달시키는 객체가 PlayerRepeatABInfo이라면...아래와 같다.
1. 우선 전달할 객체에 Parcelable을 implements한다.public class PlayerRepeatABInfo implements Parcelable{
2. 이렇게 하면, 기본 두개를 override해야된다.
public int describeContents()
public void writeToParcel(Parcel out, int arg1)
3. Parcelable.Creator를 추가해야된다. => 안하는 경우, CREATOR를 참조하면서 exception이 나오게 됩니다.
public static final Parcelable.Creator CREATOR
4. Parcel 인자가 있는 생성자를 추가해야된다.
public PlayerRepeatABInfo(Parcel in) {
Activity에서 데이타 전달시키기
1. Intent 생성
Intent intent = new Intent(PlayerActivity.this, RepeatMenu1Th.class);
2. 객체 매핑
intent.putExtra("CurrentMusicRepeatInfo", mSetRepeatInfo);
3. Start Activity.
startActivityForResult(intent, GO_REPEAT_MENU);
전달 받는 Activity에서 하는 내용.
1. 전달된 내용을 가져올 bundle를 구성.
Bundle temp = getIntent().getExtras();
2. 전달된 String으로 객체 가져오기.
PlayerRepeatABInfo mInfoData = temp.getParcelable("CurrentMusicRepeatInfo");
장황하게 글로 보는 것 보다 소스를 한번 보면 쉽게 사용하실수 있을 것입니다.
==========================================================================================================
PlayerRepeatABInfo.java public class PlayerRepeatABInfo implements Parcelable{ private long mTotalTime; private long mStartPosition; private long mEndPosition; private String mFilePath; private byte mIsSetRepeatInfo; ........ public PlayerRepeatABInfo(Parcel in) { mTotalTime = in.readLong(); mStartPosition = in.readLong(); mEndPosition = in.readLong(); mFilePath = in.readString(); mIsSetRepeatInfo = in.readByte(); } ...... @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel out, int arg1) { out.writeLong(mTotalTime); out.writeLong(mStartPosition); out.writeLong(mEndPosition); out.writeString(mFilePath); out.writeByte(mIsSetRepeatInfo); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public PlayerRepeatABInfo createFromParcel(Parcel in) { return new PlayerRepeatABInfo(in); } public PlayerRepeatABInfo[] newArray(int size) { return new PlayerRepeatABInfo[size]; } }; ...... }==========================================================================================================
이동 했던 Activity 에서 이전 Activity로 복귀시 Class 내용
PlayerActivity.java
private PlayerRepeatABInfo mSetRepeatInfo = new PlayerRepeatABInfo(xxxxx);
........
public void onClick(View v) {
........
Intent intent = new Intent(PlayerActivity.this, RepeatMenu1Th.class);
intent.putExtra("STRING_TAG", mSetRepeatInfo); => 이 녀석은 전달하려는 객체입니다.
startActivityForResult(intent, GO_REPEAT_MENU);
}
};
==========================================================================================================
전달 받은 객체 꺼내는 Class 내용
전달 받은 객체 꺼내는 Class 내용
public class RepeatMenu1Th extends ListActivity {
........
protected void onCreate(Bundle savedInstanceState) {
........
Bundle temp = getIntent().getExtras();
PlayerRepeatABInfo mInfoData = temp.getParcelable("STRING_TAG");
........
}
}........
Bundle temp = getIntent().getExtras();
PlayerRepeatABInfo mInfoData = temp.getParcelable("STRING_TAG");
........
}
반응형
'IT > Android[안드로이드]' 카테고리의 다른 글
[Activity #1] onSaveInstanceState() (0) | 2010.12.02 |
---|---|
[Intent #1] Activity에 기본 데이타 전달하기 (0) | 2010.12.01 |
[ListView #4] 사용자 Layout을 이용한 List (0) | 2010.11.25 |
[ListView #3] ListActivity상속 받아 ListView 보이기 (0) | 2010.11.25 |
[ListView #2] String.xml Array 변수로 리스트 보여주기. (0) | 2010.11.25 |