概述
因为 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);
}
大致流程就是这样的。
最后
以上就是眼睛大荷花为你收集整理的Activity传递对象集合到Fragment的全部内容,希望文章能够帮你解决Activity传递对象集合到Fragment所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复