Parcelable demo

写了个例子来试验Parcelable接口

 

程序组织

image

 

//main

ParcelableDemo.java

public class ParcelableDemo extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Person p = new Person();
        p.map = new HashMap<String, String>();
        p.map.put("key", "value");
        p.name="zhangsan";
        for(int i = 0;i < 3 ;i++){
            SelfDefineData sdd = new SelfDefineData();
            sdd.setData(100 + i);
            p.data[i] = sdd;
        }
       
        Intent intent = new Intent(this, TestActivity.class);
        intent.putExtra("person", p);
        startActivity(intent);
    }
}

 

数据对象 Person

public class Person implements Parcelable {
   
    public HashMap<String, String> map = new HashMap<String, String>();
    public String name;
    public SelfDefineData data[] = new SelfDefineData[3];

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeMap(map);
        dest.writeString(null);
        dest.writeTypedArray(data, flags);
    }
   
    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {

        @SuppressWarnings("unchecked")
        @Override
        public Person createFromParcel(Parcel source) {
            Person p = new Person();
            p.map = source.readHashMap(HashMap.class.getClassLoader());
            p.name = source.readString();
            source.readTypedArray(p.data,SelfDefineData.CREATOR);
            return p;
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

}

自定义数据 SelfDefineData

public class SelfDefineData implements Parcelable {
    private int mData = 0;
   
    public SelfDefineData(){
       
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mData);
    }
   
    public void setData(int data){
        mData = data;
    }
   
    public int getData(){
        return mData;
    }
   
    public static final Parcelable.Creator<SelfDefineData>  CREATOR =
            new Parcelable.Creator<SelfDefineData>() {

                @Override
                public SelfDefineData createFromParcel(Parcel in) {
                    return new SelfDefineData(in);
                }

                @Override
                public SelfDefineData[] newArray(int size) {
                    return new SelfDefineData[size];
                }
            };
    private SelfDefineData(Parcel in){
        mData = in.readInt();
    }
}

 

测试Activity

public class TestActivity extends Activity {
   
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
           
            Intent intent = getIntent();
            Person p = intent.getParcelableExtra("person");
            String value = p.map.get("key");
            System.out.println("map-------------->" + value);
            System.out.println("name----->" + p.name);
            System.out.println("data1----->" + p.data[0].getData());
            System.out.println("data2----->" + p.data[1].getData());
            System.out.println("data3----->" + p.data[2].getData());
     }
}

 

运行结果

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值