简介
键值对的方式
通过Bundle传递数据需要保证两个活动都使用同一个键.通常使用setData容易出问题,为了保证两个活动使用的时候是统一的可以使用final static 变量,如下:
public class ActivityHelper {
public static final String KEY_USER_NAME = "key_user_name";
public static final String KEY_USER_EMAIL = "key_user_email";
public static final String KEY_USER = "key_user";
}
通过 Parcelabe 序列化对象
implenment Parcelabe
(android.os.Parcelable
接口)- 重载方法 使其可以直接调用
intent.putParcelable(Key, Object)
example like this:
public class UserModel {
private String name;
private String email;
private String age;
}
自动生成后
public class UserModel implements Parcelable {
private String name;
private String email;
private String age;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
选中类名然后按下Command+1
自动生成如下代码
public class UserModel implements Parcelable {
private String name;
private String email;
private String age;
protected UserModel(Parcel in) {
name = in.readString();
email = in.readString();
age = in.readString();
}
public static final Creator<UserModel> CREATOR = new Creator<UserModel>() {
@Override
public UserModel createFromParcel(Parcel in) {
return new UserModel(in);
}
@Override
public UserModel[] newArray(int size) {
return new UserModel[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(email);
dest.writeString(age);
}
}
传递数据使用如下
Intent i = new Intent(CONTEXT, CLASS_NAME.class);
i.putExtra(ActivityHelper.KEY_USER, userObject);
第二个活动接收:
UserModel user = (UserModel) getIntent().getParcelableExtra(ActivityHelper.KEY_USER);
使用parceler
库简化处理
加入Gradle依赖 以最新的为准
compile 'org.parceler:parceler-api:1.1.6'
apt 'org.parceler:parceler:1.1.6'
写代码如下:
@Parcel
public class UserModel {
String name;
String email;
String age;
}
使用需要包装一下
- 序列化
Parcels.wrap(userObject)
- 反序列化
Parcels.unWrap()
使用如下
Bundle bundle = new Bundle();
bundle.putParcelable(ActivityHelper.KEY_USER, Parcels.wrap(userObject));
第二个活动里取数据
UserModel userModel = Parcels.unwrap(getIntent().getParcelableExtra(ActivityHelper.KEY_USER));
原文
http://sumatodev.com/best-way-to-pass-data-between-android-activities-and-fragments/