▶ 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;
}
}
▶ 결과
[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 |
댓글 영역