Parcel用法

android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。

Parcelable实现要点:需要实现三个东西:

1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:

writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc

2)describeContents方法

3)静态的Parcelable.Creator接口,本接口有两个方法:

createFromParcel(Parcel in) 实现从in中创建出类的实例的功能;

newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。

简单的使用方法:

public class Student  implements Parcelable{
public int _id;
public string name;
public int sex;
public int age;
Student (Parcel p){
      _id = p.readInt();
      name = p.readString();
      sex = p.readInt();
      age = p.readInt();
}

Student(){};


public static final Parcelable.Creator<Student> CREATOR
             = new Parcelable.Creator<Student>() {
                 public Student createFromParcel(Parcel p) {
                     return new Student(p);
                 }

                 public Student[] newArray(int size) {
                     return new Student[size];
                 }
             };

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel p, int flags) {
         p.writeInt(_id);
         p.writeString(label);
         p.writeInt(sex);
         p.writeInt(age);
      
     }
}


发送Parcel的activity

public SendParcel extends Activity{
      public void onCreate(Bundle bundle){
         super.onCreate(bundle);
         setContentView(R.layout.main);
         Student s = new Student();
         s._id = 1;
         s.name = "ygc";
         s.sex = 1;
         s.age= 23;
         Intent i = new Intent();
         i.putExtra("key", s);
         i.setClass(this, Receive.class);
         startActivity(i);
      }
}

接收Parcel的activity

public class Receive extends Activity {  
     public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main2);
         Intent i = getIntent();
         Student s = i.getParcelableExtra("key");
         System.out.println(s.name);
     }

}

     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或service)之间通过Intent传递一些数据,简单类型(如数字、字符串)的可以直接放入Intent。复杂类型(例如,J2ee中的Bean)的必须实现Parcelable接口。示例如下:


 

这里采用Bundle是因为在Parcel中并没有key的概念存在,而Bundle相当于Map。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值