Activity传递对象集合到Fragment

来源:互联网 发布:淘宝网二手笔记本 编辑:程序博客网 时间:2024/05/01 08:55

因为 android.support.v4.app.Fragment 的构造函数是默认的:

 public Fragment() {    }

所以传递数据就比较麻烦啦,如果在该Fragment中有一个listview,但其中的数据(List)需要从MainActivity中传过来,要怎么做呢?

可以通过序列化来实现:

public class DataBean implements Parcelable {    private String title;    private String content;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(this.title);        dest.writeString(this.content);    }    public DataBean() {    }    protected DataBean(Parcel in) {        this.title = in.readString();        this.content = in.readString();    }    public static final Parcelable.Creator<DataBean> CREATOR = new Parcelable.Creator<DataBean>() {        @Override        public DataBean createFromParcel(Parcel source) {            return new DataBean(source);        }        @Override        public DataBean[] newArray(int size) {            return new DataBean[size];        }    };}

Parcelable 是Android中的api,其效率要比 Java中的API Serializable效率高。在 Android studio中可以安装 Parcelable generator插件来实现序列化,高效简单。

 List<DataBean> dataBeanList = new ArrayList<>(); OneFragment oneFragment = new OneFragment();        Bundle bundle = new Bundle();        bundle.putParcelableArrayList("ZJT", (ArrayList<? extends Parcelable>) dataBeanList);        oneFragment.setArguments(bundle);        mFragments.add(oneFragment);

然后在 Fragment的 onCreateView方法中通过 getArguments()来获取数据,代码如下:

 Bundle bundle = getArguments();        if(bundle != null){            dataBeanList = bundle.getParcelableArrayList("ZJT");            listView = (ListView) v.findViewById(R.id.one_fragment_listview);            listViewAdapter = new ListViewAdapter(getContext(), dataBeanList);            listView.setAdapter(listViewAdapter);        }

大致流程就是这样的。

阅读全文
1 0