zoukankan      html  css  js  c++  java
  • 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
    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;   
            }   
        };   
      

    } 

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/2610015.html
Copyright © 2011-2022 走看看