상세 컨텐츠

본문 제목

[Android] Parcelable 인터페이스

Android 개발

by mobile 2012. 8. 11. 17:49

본문

반응형

▶ Parcelable interface

안드로이드에서는 Serializable 인터페이스와 유사한 Parcelable 인터페이스를 권장하는데, 그 이유는 이 인터페이시를 이용해 내부적인 데이터 전달 메커니즘이 만들어져 있기 때문입니다. 이 인터페이스를 사용하면 데이터를 전달하기 위해 객체를 직접 번들에 추가할 수 있습니다. Parcelable 인터페이스를 구현하여 객체를 직접 전달하려면 다음과 같은 두 가지 메소드를 구현해야 합니다. 


[Reference]

public abstract int describeContents()

public abstract void writeToParcel(Parcel dest, int flags)


writeToParcel() 메소드는 객체가 가지고 있는 데이터를 Parcel 객체로 만들어 주는 역할을 합니다. 이 Parcel 객체는 Bundle 객체처럼 readXXX()와 writeXXX() 메소드를  제공하므로 기본 데이터 타입을 넣고 확인할 수 있도록 합니다. 위의 두 가지 메소드를 구현하였다면 CREATOR라는 상수를 만들어야 하는데 이 상수는 Parcel 객체로 부터 데이터를 읽어 들여 객체를 생성하는 역할을 합니다. 기 객체는 상수로 정의되므로 반드시 static final로 선언되어야 합니다.


▶ SimpleParcelableActivity.java 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;


public class SimpleParcelableActivity extends Activity {

public static final String KEY_SIMPLE_DATA = "data";

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        Button launchBtn = (Button) findViewById(R.id.launchBtn);

        launchBtn.setOnClickListener(new OnClickListener() {

        public void onClick (View v) {

        Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);

       

        SimpleData data = new SimpleData(100, "Hello Android!");

        intent.putExtra(KEY_SIMPLE_DATA, data);

       

        startActivity(intent);

        }

        });

    }

}


▶  AnotherActivity .java 

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;


public class AnotherActivity extends Activity {


public static final String KEY_SIMPLE_DATA = "data";

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.another);

TextView txtMsg = (TextView) findViewById(R.id.txtMsg); 

Bundle bundle = getIntent().getExtras();

SimpleData data = (SimpleData) bundle.getParcelable(KEY_SIMPLE_DATA);

txtMsg.setText("Number : " + data.getNumber() + "\nMessage : " + data.getMessage());

}

}


▶  SimpleData .java

import android.os.Parcel;

import android.os.Parcelable;


public class SimpleData implements Parcelable {


int number;

String message;


public SimpleData(int num, String msg) {

number = num;

message = msg;

}


public SimpleData(Parcel src) {

number = src.readInt();

message = src.readString();

}


public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

public SimpleData createFromParcel(Parcel in) {

return new SimpleData(in);

}


public SimpleData[] newArray(int size) {

return new SimpleData[size];

}

};


public int describeContents() {

// TODO Auto-generated method stub

return 0;

}

// Parcel 객체로 쓰기

public void writeToParcel(Parcel dest, int flag) {

// TODO Auto-generated method stub

dest.writeInt(number);

dest.writeString(message);

}

public int getNumber() { 

        return number; 

    } 

  

    public void setNumber(int number) { 

        this.number = number; 

    } 

  

    public String getMessage() { 

        return message; 

    } 

} 


▶ 결과




반응형

'Android 개발' 카테고리의 다른 글

[Andrid] Service 예제  (1) 2012.08.12
[Android] Activity 수명주기  (0) 2012.08.12
[Android] Activity 와 Stack Flag  (0) 2012.08.11
[Android]Intent 예제  (0) 2012.08.11
[Android] 레이아웃 인플레이션 (Layout Inflation) 예제.  (0) 2012.08.10

관련글 더보기

댓글 영역