`
Jack22
  • 浏览: 131388 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Parcelable

阅读更多
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);
     }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics