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

Fragment之间使用Bundle传递对象,数据,序列化,集合

2017-02-23 13:51 423 查看

一.首先将对象序列化

序列化的作用

1)永久性保存对象,保存对象的字节序列到本地文件中;

2)通过序列化对象在网络中传递对象;

3)通过序列化在进程间传递对象。

两种方法序列化.

一是实现Serializable接口(是JavaSE本身就支持的),implement Serializable一下就可以了

一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。

效率更高,推荐用Parcelable提高性能。

尽管Serializable效率低点,但Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性.

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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐