您的位置:首页 > 移动开发 > Objective-C

【Android数据传递】Intent传递List和Object和List<Object>(附源码)

2014-07-10 11:27 543 查看

一、传递List

传递List<String>的方法

[java]
view plaincopyprint?

ArrayList<String> info = new ArrayList<String>(); info.add(name); info.add(website); info.add(weibo); Intent intent = new Intent(MainActivity.this, ResultActivity.class); intent.putStringArrayListExtra("infoList", info); startActivity(intent);

ArrayList<String> info = new ArrayList<String>();

info.add(name);

info.add(website);

info.add(weibo);

Intent intent = new Intent(MainActivity.this, ResultActivity.class);

intent.putStringArrayListExtra("infoList", info);

startActivity(intent);


接收List<String>的方法

[java]
view plaincopyprint?

ArrayList<String> infoList = new ArrayList<String>();

infoList = getIntent().getStringArrayListExtra("infoList");

ArrayList<String> infoList = new ArrayList<String>();

infoList = getIntent().getStringArrayListExtra("infoList");


传递List<Integer>的方法

[java]
view plaincopyprint?

intent.putIntegerArrayListExtra(key, list);

intent.putIntegerArrayListExtra(key, list);

接收List<Integer>的方法

[java]
view plaincopyprint?

list =(ArrayList<Integer>) getIntent().getIntegerArrayListExtra(key);

list =(ArrayList<Integer>) getIntent().getIntegerArrayListExtra(key);


二、传递Object

有两种方式来传递Object:Serializable和Parcelable

2.1 使用Serializable方式

前提:Object需要实现Serializable接口

用Serializable方式传递Object的语法:bundle.putSerializable(key,object);

用Serializable方式接收Object的语法:object=(Object) getIntent().getSerializableExtra(key);

实现Serializable接口就是把对象序列化,然后再传输,和Java的常用编程没什么明显区别,而且Object不需要明显改变,推荐用这种方式。

Object实现Serializable

[java]
view plaincopyprint?

package com.wirelessqa.testintent;

import java.io.Serializable;

/**
* OBJECT实现SERIALIZABLE
* @author bixiaopeng 2013-2-18 上午11:32:19

*/
public class SerInfo
implements Serializable {

private String name;

private String website;

private String weibo;

public SerInfo(){}

public SerInfo(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;

}

}

package com.wirelessqa.testintent;

import java.io.Serializable;

/**
* OBJECT实现SERIALIZABLE
* @author bixiaopeng 2013-2-18 上午11:32:19
*/
public class SerInfo implements Serializable {

private String name;
private String website;
private String weibo;
public SerInfo(){}

public SerInfo(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;
}

}

用Serializable方式传递Object

[java]
view plaincopyprint?

SerInfo serInfo = new SerInfo(name, website, weibo);

Intent intent = new Intent();

Bundle bundle = new Bundle();

bundle.putSerializable("serinfo", serInfo);

intent.setClass(MainActivity.this, ResultActivity.class);

intent.putExtras(bundle);
startActivity(intent);

SerInfo serInfo = new SerInfo(name, website, weibo);
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putSerializable("serinfo", serInfo);
intent.setClass(MainActivity.this, ResultActivity.class);
intent.putExtras(bundle);
startActivity(intent);

用Serializable方式接收Object

[java]
view plaincopyprint?

//获得Serializable方式传过来的值

SerInfo serInfo = (SerInfo) getIntent().getSerializableExtra("serinfo");

//获得Serializable方式传过来的值
SerInfo serInfo = (SerInfo) getIntent().getSerializableExtra("serinfo");

2.2 使用Parcelable方式

前提:Object需要实现Parcelable接口

用Parcelable方式传递Object的语法:bundle.putParcelable(key,object);

用Parcelable方式接收Object的语法:object=(Object) getIntent().getParcelableExtra(key);

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


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


newArray(int size) 创建一个类型为T,长度为size的数组, returnnew T[size];即可。本方法是供外部类反序列化本类数组使用。

Object需要实现Parcelable接口

[java]
view plaincopyprint?

package com.wirelessqa.testintent;

import android.os.Parcel;

import android.os.Parcelable;

/**
* Object需要实现Parcelable接口

* @author bixiaopeng 2013-2-18 上午11:32:19

*/
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];

}
};

}

package com.wirelessqa.testintent;

import android.os.Parcel;
import android.os.Parcelable;

/**
* Object需要实现Parcelable接口
* @author bixiaopeng 2013-2-18 上午11:32:19
*/
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];
}
};

}


用Parcelable方式传递Object

[java]
view plaincopyprint?

ParInfo parInfo = new ParInfo(name, website, weibo);

Intent intent = new Intent();

Bundle bundle = new Bundle();

bundle.putParcelable("parinfo", parInfo);// 这里调用了writeToParcel方法,向dest写数据

intent.setClass(MainActivity.this, ResultActivity.class);

intent.putExtras(bundle);
startActivity(intent);

ParInfo parInfo = new ParInfo(name, website, weibo);
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putParcelable("parinfo", parInfo);// 这里调用了writeToParcel方法,向dest写数据
intent.setClass(MainActivity.this, ResultActivity.class);
intent.putExtras(bundle);
startActivity(intent);

用Parcelable方式接收Object

[java]
view plaincopyprint?

//获得Parcelable方式传过来的值

ParInfo parInfo = (ParInfo) getIntent().getParcelableExtra("parinfo");//这里调用了UsercreateFromParcel方法,返回ParInfo实例

//获得Parcelable方式传过来的值
ParInfo parInfo = (ParInfo) getIntent().getParcelableExtra("parinfo");//这里调用了UsercreateFromParcel方法,返回ParInfo实例

三、传递List<Object>

传递List<Object>的方法

[java]
view plaincopyprint?

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 = 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);

接收List<Object>的方法

[java]
view plaincopyprint?

//获得传过来的List<Object>

ArrayList<SerInfo> listObj = (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj");

<span style="color: rgb(255, 0, 0); font-size: 24px;">源码下载:http://pan.baidu.com/share/link?shareid=266032&uk=436271564</span>

转自:/article/1624460.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐