Android 中Parcelable的做用

android提供了一種新的類型:Parcel。本類被用做封裝數據的容器,封裝後的數據能夠經過Intent或IPC傳遞。 除了基本類型以
外,只有實現了Parcelable接口的類才能被放入Parcel中。
Parcelable實現要點:須要實現三個東西
1)writeToParcel 方法。該方法將類的數據寫入外部提供的Parcel中.聲明以下:
writeToParcel (Parcel dest, int flags) 具體參數含義見javadoc
2)describeContents方法。沒搞懂有什麼用,反正直接返回0也能夠
3)靜態的Parcelable.Creator接口,本接口有兩個方法:
createFromParcel(Parcel in) 實現從in中建立出類的實例的功能
newArray(int size) 建立一個類型爲T,長度爲size的數組,僅一句話(return new T[size])便可。估計本方法是供外部類反序列化本類數組使用。
測試用的接收信息Activity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
public class Test extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent i = getIntent();
Person p = i.getParcelableExtra("yes");
System.out.println("---->"+p.name);
System.out.println("---->"+p.map.size());
}
}
發送的Activity
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class TestNew extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent();
Person p = new Person();
p.map = new HashMap<String,String>();
p.map.put("yes", "ido");
p.name="ok";
intent.putExtra("yes", p);
intent.setClass(this, Test.class);
startActivity(intent);
}
}
Parcelable的實現類
import java.util.HashMap;
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
public HashMap<String,String> map = new HashMap<String,String> ();
public String name ;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeMap(map);
dest.writeString(name);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
//重寫Creator
@Override
public Person createFromParcel(Parcel source) {
Person p = new Person();
p.map=source.readHashMap(HashMap.class.getClassLoader());
p.name=source.readString();
return p;
}
@Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return null;
}
};

} java

相關文章
相關標籤/搜索