CODEDRAGON ㆍDevelopment/Android
Parcelable 인터페이스
안드로이드에서 자바의 Serialization 개념과 유사한 Parcelable이라는 인터페이스를 제공하고 있습니다.
오브젝트를 Parcelable 클래스로 만들어 주려면 android.os.Parcelable 인터페이스를 구현해야 합니다.
public interface Parcelable
https://developer.android.com/reference/android/os/Parcelable.html
Parcelable 오브젝트 사용단계
단계 |
설명 |
1 |
android.os.Parcelable 인터페이스를 구현 |
2 |
android.os.Parcelable 인터페이스에 있는 2개의 메소드 오버라이드 |
3 |
Parcelable.Creator 타입의 CREATOR라는 변수를 정의 |
4 |
모든 parcel된 데이터를 복구하는 생성자를 정의 |
5 |
Parcelable 오브젝트를 인텐트로 보내기 |
6 |
Parcelable 오브젝트를 가져와서 사용하기 |
1단계: android.os.Parcelable 인터페이스를 구현
오브젝트를 Parcelable 클래스로 만들어 주려면 android.os.Parcelable 인터페이스를 구현해야 합니다.
public class DataPacel implements Parcelable{
@Override public int describeContents() { return 0; }
@Override public void writeToParcel(Parcel dest, int flags) { } } |
2단계: android.os.Parcelable 인터페이스에 있는 2개의 메소드 오버라이드
android.os.Parcelable 인터페이스에 있는 2개의 메소드를 오버라이드 해 줘야만 한다
describeContents() |
Parcel 하려는 오브젝트의 종류를 정의한다. |
writeToParcel(Parcel dest, int flags) |
실제 오브젝트 serialization/flattening을 하는 메소드. 오브젝트의 각 엘리먼트를 각각 parcel해줘야 한다. |
3단계: Parcelable.Creator 타입의 CREATOR라는 변수를 정의
Parcel에서 데이터를 un-marshal/de-serialize하는 단계를 추가해주어야 합니다.
이를 위해 Parcelable.Creator 타입의 CREATOR라는 변수를 정의해야 합니다.
public static final Creator<DataPacel> CREATOR = new Creator<DataPacel>() {
@Override public DataPacel createFromParcel(Parcel in) { return new DataPacel(in); }
@Override public DataPacel[] newArray(int size) { return new DataPacel[size]; } }; |
4단계: 모든 parcel된 데이터를 복구하는 생성자를 정의
모든 parcel된 데이터를 복구하는 생성자를 정의합니다.
이 때 writeToParcel() 메소드에서 기록한 순서와 동일하게 복구해야 합니다(주의).
5단계: Parcelable 오브젝트를 인텐트로 보내기
putExtra("key", object) |
Object인 경우 |
putParcelableArrayListExtra("key", object) |
ArrayList인 경우 |
6단계: Parcelable 오브젝트를 가져와서 사용하기
getParcelable("key") |
Object인 경우 |
getParcelableArrayListExtra("key") |
ArrayList인 경우 |
'Development > Android' 카테고리의 다른 글
XmlPullParser (0) | 2017.02.02 |
---|---|
DOM (Document Object Model)파서 (0) | 2017.02.02 |
Activity 간 객체 전달 방법 - Serializable 인터페이스를 이용한 방법, Parcelable 인터페이스를 이용한 방법 (0) | 2017.02.01 |
AVD(애뮬레이터)에서 지도(map)표시하기 (0) | 2017.02.01 |
인텐트(intent)로 데이터 전달 - putExtra, getExtras (0) | 2017.01.31 |