Android 中Parcelable的作用

http://blog.sina.com.cn/s/blog_78e3ae430100pxba.html

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
  1. import android.app.Activity;    
  2. import android.content.Intent;    
  3. import android.os.Bundle;    
  4. import android.os.Parcelable;    
  5.  
  6.    
  7. public class Test extends Activity {    
  8.  
  9.        
  10.     @Override   
  11.     public void onCreate(Bundle savedInstanceState) {    
  12.  
  13.         super.onCreate(savedInstanceState);    
  14.         setContentView(R.layout.main);    
  15.         Intent i = getIntent();    
  16.         Person p = i.getParcelableExtra("yes");    
  17.         System.out.println("---->"+p.name);    
  18.         System.out.println("---->"+p.map.size());    
  19.  
  20.     }    
  21.  
  22. }   
  23.  
  24. 发送的Activity 
  25.  
  26. import java.util.HashMap;    
  27. import android.app.Activity;    
  28. import android.content.Intent;    
  29. import android.os.Bundle;    
  30.  
  31.    
  32. public class TestNew extends Activity {    
  33.  
  34.        
  35.     @Override   
  36.  
  37.     public void onCreate(Bundle savedInstanceState) {    
  38.         super.onCreate(savedInstanceState);    
  39.         setContentView(R.layout.main);    
  40.         Intent intent = new Intent();    
  41.         Person p = new Person();    
  42.         p.map = new HashMap<String,String>();    
  43.         p.map.put("yes", "ido");    
  44.         p.name="ok";    
  45.         intent.putExtra("yes", p);    
  46.         intent.setClass(this, Test.class);    
  47.         startActivity(intent);    
  48.  
  49.     }    
  50.  
  51. }   
  52.  
  53. Parcelable的实现类 
  54.  
  55. import java.util.HashMap;    
  56.   
  57. import android.os.Parcel;    
  58. import android.os.Parcelable;    
  59.   
  60.  
  61. public class Person implements Parcelable {    
  62.  
  63.    
  64.     public HashMap<String,String> map = new HashMap<String,String> ();    
  65.   
  66.  
  67.     public String name ;    
  68.     @Override   
  69.     public int describeContents() {    
  70.  
  71.         return 0;    
  72.  
  73.     }    
  74.  
  75.    
  76.  
  77.     @Override   
  78.     public void writeToParcel(Parcel dest, int flags) {    
  79.  
  80.    
  81.         dest.writeMap(map);    
  82.         dest.writeString(name);    
  83.  
  84.     }    
  85.  
  86.     public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {    
  87.  
  88. //重写Creator 
  89.  
  90.    
  91.         @Override   
  92.         public Person createFromParcel(Parcel source) {    
  93.  
  94.             Person p = new Person();    
  95.             p.map=source.readHashMap(HashMap.class.getClassLoader());    
  96.             p.name=source.readString();    
  97.             return p;    
  98.  
  99.         }    
  100.  
  101.    
  102.         @Override   
  103.         public Person[] newArray(int size) {    
  104.  
  105.             // TODO Auto-generated method stub    
  106.             return null;    
  107.  
  108.         }    
  109.  
  110.     };    
  111.  
  112.    
  113. }    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值