您的位置:首页 > 移动开发 > Android开发

Android Activity间传递数据

2016-03-24 14:56 316 查看
转载请注明:/article/9320398.html

一、使用Intent传递数据

1、传递简单数据

传递简单数据,如8种基本数据类型和String 都可以,通过Intent.putExtra()方法传递

FirstActivity中发送:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("name", "value");
intent.putExtra("id", 1);
startActivity(intent);


SecondActivity中获取:

String name=getIntent().getStringExtra("name");
int id=getIntent().getIntExtra("id", 0);//后一个参数为默认值


2、传递复杂数据

传递较复杂的数据,可以通过Bundle对象。既可以传递简单数据,也可传递数组或者链表等。

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
Bundle bundle=new Bundle();
bundle.putFloat("float", 0.4f);
String[] s={"aaaa","bbb"};
bundle.putStringArray("string",s );
intent.putExtras(bundle);
startActivity(intent);


3、传递自定义对象

传递自定义的对象时,要将类序列化(实现Serializable接口或Parcelable接口)。Serializable接口是Java提供的,使用比较简单,性能低;Parcelable接口是Android提供的,使用稍复杂,但性能高。

(1)自定义定义类实现Serializable接口

public class User implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String name,int age){
this.name=name;
this.age=age;
}
}


FirstActivity发送

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
User user=new User("name",0);
intent.putExtra("user", user);
startActivity(intent);


SecondActivity获取对象

User user=(User)getIntent().getSerializableExtra("user");


(2)定义类实现Parcelable接口,实现相应的方法

public class User implements Parcelable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String name,int age){
this.name=name;
this.age=age;
}
/**
* Parcel对象为参数的构造函数
* @param source
*/
public User(Parcel source){
this.name=source.readString();
this.age=source.readInt();
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// 将对象映射成Parcel对象,把每个属性写入Parcel,按照写的顺序读出来
dest.writeString(name);
dest.writeInt(age);

}
/**
* 将Parcel容器的数据转化为对象数据
*/
public static final Creator<User> CREATOR=new Creator<User>() {

@Override
public User[] newArray(int size) {
// 返回对象数据的大小
return new User[size];
}

@Override
public User createFromParcel(Parcel source) {
// 从Parcel中取出数据进行转换,按照写的顺序读出来

return new User(source);
}
};


FirstActivity发送:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
User user=new User("name",0);
intent.putExtra("user", user);
startActivity(intent);


SecondActivity获取:

User user=(User)getIntent().getParcelableExtra("user");


4、获取返回参数

FirstActivity中获取SecondActivity的返回值是StartActivityForResult()方法,同时实现onActivityResult(int requestCode, int resultCode, Intent data)方法

FirstActivity中发送:

private static final int requestCode=0x11;//请求码

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent, requestCode);


SecondActivity中设置,(也可以不设置)

int resultCode=0x22;//结果码,可设置不同的结果码,让FirstActivity根据结果码的不同来解决问题
Intent intent=new Intent();
intent.putExtra("data", "stringValue");
setResult(resultCode, intent);


当SecondActivity结束或者销毁时,会返回FirstActivity,调用OnActivityResult()方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){//即可以判断requestCode也可以判断resultCode,根据值得不同进行对应的操作。
case 0x11:
//进行一些操作
String value=data.getStringExtra("data");
break;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: