美文网首页
Fragment之间使用Bundle传递对象,数据,序列化,集合

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

作者: sun_wenming | 来源:发表于2017-04-05 12:01 被阅读0次

    一.首先将对象序列化

    序列化的作用
    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");
        }
    

    相关文章

      网友评论

          本文标题:Fragment之间使用Bundle传递对象,数据,序列化,集合

          本文链接:https://www.haomeiwen.com/subject/eebtattx.html