A activity跳转到B activity,值的传递无非两种:A-->B ,B -->A,每种方式可分为数据发送和数据接收两步。
A-->B
- 简单数据或者bundle传递
在startActivity方法中传入intent作为参数,该intent可以包含多种数据类型的数据,也可传入bundle。
发送:i.putExtra("data","这是传入的值");
接收:String resStr = i.getStringExtra("data");
- 值对象传递
该值对象需要实现序列化接口:
一种是java提供的Serializable
,接收方直接使用intent.getSerializableExtra("key");
进行解析。
一种是android提供的Parcelable
,接收方使用intent.getParcelableExtra("key");
进行解析,另外,implements Parcelable
的类需要实现几个方法:
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(getName());
parcel.writeInt(getAge());
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel parcel) {
return new User(parcel.readString(),parcel.readInt());
}
@Override
public User[] newArray(int i) {
return new User[i];
}
};
B-->A
即获取被启动的activity传回的参数
- A
当一个activity需要接收返回数据的时候,不能直接使用startActivity
这个函数了,需要替换成startActivityForResult(i,reqCode);
//第一个参数是传入的数据intent,第二个参数是请求码,标志此次请求的意义。
需要重写下面的方法来获取返回码和返回值进行处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String resStr = data.getStringExtra("res").toString();
}
- B
在组装好要返回的intent数据之后,调用setResult(1,intent);
//第一个参数表示返回码,标志成功或失败;第二个是传回的数据
可以调用finish()函数关闭当前activity