Activity之间传递对象

来源:互联网 发布:麦田怪圈知乎 编辑:程序博客网 时间:2024/05/01 05:21

Activity之间传递对象


声明:如果对象要被传递,那么该对象必须通过实现Serialable接口或者Parcelable接口实现对象的序列化。

Serialable为java提供对象序列化的接口,效率低

Parcelable为android提供对象序列化的接口,移动平台专用,效率高

1、传递List《String》

传递List

ArrayList<String> list = new ArrayList<>();intent.putStringArrayListExtra("key",list);

接收List

intent.getStringArrayListExtra("key");

2、传递List《Integer》

传递List

ArrayList<Integer> list = new ArrayList<>();intent.putIntegerArrayListExtra("key",list);

接收List

intent.getIntegerArrayListExtra("key");

3、传递Object

3.1实现Serialable接口

前提:Object要是先Serialbale接口用Serializable方式传递Object的语法:bundle.putSerializable(key,object);用Serializable方式接收Object的语法:getIntent().getSerializableExtra(key);

3.2实现Parcelable接口

前提:Object需要实现Parcelable接口用Parcelable方式传递Object的语法:bundle.putParcelable(key,object);用Parcelable方式接收Object的语法:getIntent().getParcelableExtra(key);

实现Parcelable接口的类比较复杂,Parcelable是个什么东西呢?

Android提供了一种新的类型:Parcel,被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。实现Parcelable接口需要实现三个方法:  1)writeToParcel方法。该方法将类的数据写入外部提供的Parcel中。  2)describeContents方法。直接返回0就可以。  3)静态的Parcelable.Creator<T>接口,本接口有两个方法:createFromParcel(Parcel in) 实现从in中创建出类的实例的功能。   newArray(int size) 创建一个类型为T,长度为size的数组, returnnew T[size];即可。本方法是供外部类反序列化本类数组使用。

实现Parcelable接口[demo]示例

package com.wirelessqa.testintent;import android.os.Parcel;import android.os.Parcelable;/** * Object需要实现Parcelable接口 * @author XF 2016.10.25 */public class ParInfo implements Parcelable{    private String name;    private String website;    private String weibo;    public ParInfo(){    }    public ParInfo(String name, String website, String weibo){        this.name = name;        this.website = website;        this.weibo = weibo;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getWebsite() {        return website;    }    public void setWebsite(String website) {        this.website = website;    }    public String getWeibo() {        return weibo;    }    public void setWeibo(String weibo) {        this.weibo = weibo;    }    @Override    public int describeContents() {        // TODO Auto-generated method stub        return 0;    }    //该方法将类的数据写入外部提供的Parcel中。    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(name);        dest.writeString(website);        dest.writeString(weibo);    }    public static final Parcelable.Creator<ParInfo> CREATOR  = new Creator<ParInfo>() {        //实现从source中创建出类的实例的功能        @Override        public ParInfo createFromParcel(Parcel source) {            ParInfo parInfo  = new ParInfo();            parInfo.name = source.readString();            parInfo.website= source.readString();            parInfo.weibo = source.readString();            return parInfo;        }        //创建一个类型为T,长度为size的数组        @Override        public ParInfo[] newArray(int size) {            return new ParInfo[size];        }    };   }

4、传递List《Object》

传递

    ArrayList<SerInfo> listObj = new ArrayList<SerInfo>();    SerInfo serInfo1 = new SerInfo(name, website, weibo);    SerInfo serInfo2 = new SerInfo(name, website, weibo);    listObj.add(serInfo1);    listObj.add(serInfo2);    Intent intent = new Intent();    intent.setClass(MainActivity.this, ResultActivity.class);    intent.putExtra("listobj", (Serializable) listObj);    startActivity(intent);

接收

ArrayList<SerInfo> listObj =  (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj"); 
0 0
原创粉丝点击