博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Fragment间对象传递
阅读量:6962 次
发布时间:2019-06-27

本文共 4787 字,大约阅读时间需要 15 分钟。

 由于Activity相对较为笨重,因而在日常的开发中很多时候会用到Fragment。然而Activity之间是通过Intent进行数据的传递,那Fragment是通过什么来进行传递的呢?Fragment之间又是通过什么方式来进行对象的传递呢?

  Android控件之间传递(Activity和Activity间传递对象、Fragment和Fragment间传递对象)对象有两种实现方式。一种是实现Java提供的Serializable接口,另一种是实现android提供的Parcelable接口。两者之间各有优势;实现Serializable接口的话最简单,直接添加接口的实现即可,但是效率较低;实现Parcelable的话效率较高,但需要自己实现Parcelable的方法。下面看下两种方法的具体实现:

  原有Article类

package com.example.news.andoridnewsapp;public class Article {    private String title;    private String linkmd5;    private String link;    private String desc;    public String getLinkmd5() {        return linkmd5;    }    public void setLinkmd5(String linkmd5) {        this.linkmd5 = linkmd5;    }    public String getLink() {        return link;    }    public void setLink(String link) {        this.link = link;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

  一、实现Serializable,只要在public class Article后面添加接口的实现(implements Serializable)即可

package com.example.news.andoridnewsapp;public class Article implements Serializable {    private String title;    private String linkmd5;    private String link;    private String desc;    public String getLinkmd5() {        return linkmd5;    }    public void setLinkmd5(String linkmd5) {        this.linkmd5 = linkmd5;    }    public String getLink() {        return link;    }    public void setLink(String link) {        this.link = link;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

  Fragment1进行参数传递

ArticleConententFragment fragment = new ArticleConententFragment();Bundle args = new Bundle();args.putSerializable(ARG_ARTICLE, article);fragment.setArguments(args);

  Fragment2进行参数的接收

(Article) getArguments().getSerializable(ARG_ARTICLE);

  二、实现Parcelable,如果通过Parcelable的方式进行实现的话,需要实现Parcelable接口的方法describeContents(此方法一般不用修改)、writeToParcel(主要是此方法)和创建一个Creator属性。

package com.example.news.andoridnewsapp;import android.os.Bundle;import android.os.Parcel;import android.os.Parcelable;//public class Article implements Serializable {
public class Article implements Parcelable { private String title; private String linkmd5; private String link; private String desc; public String getLinkmd5() { return linkmd5; } public void setLinkmd5(String linkmd5) { this.linkmd5 = linkmd5; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Override public String toString() { return this.title; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { Bundle bundle = new Bundle(); bundle.putString("title", getTitle()); bundle.putString("desc", getDesc()); bundle.putString("link", getLink()); bundle.putString("linkmd5", getLinkmd5()); dest.writeBundle(bundle); } public static final Creator
CREATOR = new Creator
() { @Override public Article createFromParcel(Parcel source) { Bundle bundle = source.readBundle(); Article article = new Article(); article.setTitle(bundle.getString("title")); article.setDesc(bundle.getString("desc")); article.setLink(bundle.getString("link")); article.setLinkmd5(bundle.getString("linkmd5")); return article; } @Override public Article[] newArray(int size) { return new Article[size]; } };}

  Fragment1进行参数传递

ArticleConententFragment fragment = new ArticleConententFragment();
Bundle args = new Bundle();//args.putSerializable(ARG_ARTICLE, article);args.putParcelable(ARG_ARTICLE, article);fragment.setArguments(args);

  Fragment2进行参数接收

//            mArticle = (Article) getArguments().getSerializable(ARG_ARTICLE);            mArticle = (Article) getArguments().getParcelable(ARG_ARTICLE);

  这样便可方便地实现对象参数的传递。其实传递的是一个Bundle对象,如果实现的是Serializable接口,则通过Bundle的putSerializable和getSerializable进行设置和获取;如果实现的是Parceable接口,则通过putParceable和getParceable进行设置和获取。

本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4898607.html,如需转载请自行联系原作者
你可能感兴趣的文章
初识EHCache缓存框架(2.x版本)
查看>>
linux 查找文件夹中大文件
查看>>
分享平时工作中那些给力的shell命令
查看>>
Ubuntu could not connect to session bus错误解决方案,附带自己的修正经过
查看>>
一个人的MVP(微软全球最有价值专家),所有人的帮助!
查看>>
如何查看linux系统版本
查看>>
整形数组合并
查看>>
Redraiment的走法
查看>>
C#学习常用类(11001)---TextRender类
查看>>
android 单元测试 如何run
查看>>
xcode4.2中如何取消ARC
查看>>
精锐5 IE -业内首款专为工业设备领域打造的加密锁
查看>>
ExtJS4.2学习(七)EditorGrid可编辑表格
查看>>
彻底理解ReentrantLock
查看>>
sqlite 时间函数
查看>>
Oracle学习笔记之第七节手动数据库链介绍
查看>>
<Error> <Socket> <BEA-000403> <IOException occurred on socket: Socket
查看>>
tcp协议几个要注意的点
查看>>
Python 之re模块
查看>>
Java注解之Retention、Documented、Inherited介绍
查看>>