[안드로이드] Android Parcelable
2014. 3. 21. 12:54ㆍMobile/Android
반응형
안드로이드 Android Parcelable
매번 intent로 각 필드값을 전달 하는 수법이 그많은 필드값을 보낼경우
혹은 기본타입이 아닌 오브젝트 같은 컴포넌트를 보내야할경우 Intent PutExtra(); 로 가능하지 않다
자바의 Serialization 개념과 비슷하다.
Parcelable 에서 상속받아야할 describeContents , writeToParcel 필수 아래의 소스를 보고 이해해보도록...
package kr.seoul.amc.teampBEAN; import android.os.Parcel; import android.os.Parcelable; public class ggariParcelable implements Parcelable{ private int _age; private String _id; private String _pw; private String _name; private String _phone; public ggariParcelable(){ } public ggariParcelable(int _age, String _id, String _pw, String _name, String _phone) { super(); this._age = _age; this._id = _id; this._pw = _pw; this._name = _name; this._phone = _phone; } public ggariParcelable(Parcel in) { readFromParcel(in); } public int get_age() { return _age; } public void set_age(int _age) { this._age = _age; } public String get_id() { return _id; } public void set_id(String _id) { this._id = _id; } public String get_pw() { return _pw; } public void set_pw(String _pw) { this._pw = _pw; } public String get_name() { return _name; } public void set_name(String _name) { this._name = _name; } public String get_phone() { return _phone; } public void set_phone(String _phone) { this._phone = _phone; } //parcel 오브젝트 종류 @Override public int describeContents() { return 0; } // 실제 오브젝트 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(_age); dest.writeString(_id); dest.writeString(_pw); dest.writeString(_name); dest.writeString(_phone); } // 복구하는 생성자 writeToParcel 에서 기록한 순서를 똑같이 해줘야함 public void readFromParcel(Parcel in) { _age = in.readInt(); _id = in.readString(); _pw = in.readString(); _name = in.readString(); _phone = in.readString(); } //creator 정의 안하면 에러발생 //Parcelable protocol requires a Parcelable.Creator object called CREATOR //상수 정의 여서 static fianl ? @SuppressWarnings("rawtypes") public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ggariParcelable createFromParcel(Parcel in) { return new ggariParcelable(in); } @Override public ggariParcelable[] newArray(int size) { // TODO Auto-generated method stub return new ggariParcelable[size]; } }; } /** * 사용하는방법 * ggariParcelable ggari = new ggariParcelable(); * ggari.set_id("ggari"); ggari.set_pw("1234"); //필드값 입력 * * Intent intent = new Intent(context, xxx.class); * intent.putExtra ("ggariParcelable", ggari); * StartActivity(intent); * *************************************************************** * *************************************************************** * 인텐트를 받는 클랠스 부분 * Bundle bundle = getIntent().getExtras(); * ggariParcelable ggari = bundle.getParcelable("ggariParcelable"); * * * ArrayList 를 이용해 값을 보낼경우 * ArrayList <ggariparcelable> ggari = new ArrayList<ggariparcelable>(); * temp.set_age(20); * temp.set_name("ggari); * temp.set_pw("1234"); * ggari.add(temp); * * Intent intent = new Intent(context, xxx.class); * intent.putParcelableArrayListExtra("ggari, ggari); * startActivity(intent); * * 받는곳에서 * ArrayList <ggariparcelable> ggari = new ArrayList<ggariparcelable>(); * Intent intent = getIntent(); * ggari = intent.getParcelableArrayListExtra("ggari); * * */
반응형
'Mobile > Android' 카테고리의 다른 글
안드로이드 자바스크립트 연동 (6) | 2014.04.21 |
---|---|
Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Please use Android Tools > Fix Project Properties. (0) | 2014.04.20 |
안드로이드 버전 확인 (0) | 2014.02.26 |
안드로이드 비행기 모드 확인방법 (0) | 2014.02.05 |
안드로이드 asynctask (0) | 2014.01.28 |