一.首先將對象序列化
序列化的作用
1)永久性保存對象,保存對象的字節序列到本地文件中;
2)通過序列化對象在網絡中傳遞對象;
3)通過序列化在進程間傳遞對象。
兩種方法序列化.
- 一是實現Serializable接口(是JavaSE本身就支持的),implement Serializable一下就可以了
- 二是實現Parcelable接口(是Android特有功能,效率比實現Serializable接口高效,可用于Intent數據傳遞,也可以用于進程間通信(IPC))。
- 效率更高,推薦用Parcelable提高性能。
- 盡管Serializable效率低點,但Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable在外界有變化的情況下不能很好的保證數據的持續性.(需要服務器返回數據變更了,或許你能體驗到~)
Serializable 序列化的實現
比較方便,效率沒Parcelable高
public class Test implements Serializable {
}
Parcelable 序列化的實現
/**
* Created by SwmIsMe on 2017/2/23.
*/
public class Test implements Parcelable {
private String name;
private String sex;
protected Test(Parcel in) {
name = in.readString();
sex = in.readString();
}
public static final Creator<Test> CREATOR = new Creator<Test>() {
@Override
public Test createFromParcel(Parcel in) {
return new Test(in);
}
@Override
public Test[] newArray(int size) {
return new Test[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(sex);
}
}
二.使用Bundle封裝數據
// 創建一個 bundle 傳遞 數據
Bundle bundle = new Bundle();
//使用bundle合適的put方法傳遞數據
bundle.putSerializable("projectList", (Serializable) projectList);
// 新建一個 fragment
ProjectFragment fragment = new ProjectFragment();
// 將數據 保存到 fragment 里面
fragment.setArguments(bundle);
三.在Fragment里面獲取bundle的數據
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
mProjects = (List<HometabProject>) bundle.getSerializable("projectList");
}