由于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<Article> CREATOR = new Creator<Article>() {
@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进行设置和获取。

Android Fragment间对象传递的更多相关文章

  1. Servlet页面间对象传递的方法

    Servlet页面间对象传递的方法 1.request 2.session 3.application 4.cookie 5.其它的

  2. Android - fragment之间数据传递

    <Fragment跳转时传递参数及结果回传的方法> <Fragment详解之五——Fragment间参数传递> <Android解惑 - 为什么要用Fragment.se ...

  3. jsp页面间对象传递方法

    严格的来说不能叫做JSP页面间的对象传递,实际应该是页面间对象共享的方法: 1. 通过servletcontext,也就是application对象了,但这种情况要求在同一个web应用下,      ...

  4. android Fragment的数据传递

    Bundle传递参数 Fragment1 fragment1 = new Fragment1();Bundle bundle = new Bundle();bundle.putString(" ...

  5. Android Fragment间的广播消息接收

    这种方式不用在配置文件加东西,我比较喜欢. 广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里. LocalBroadcastM ...

  6. android active间数据传递

    Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...

  7. fragment间的数据传递

    今天我将要讲的是fragment间的数据是如何进行传递的.这里我将举个简单的例子. 首先要有个MainActivity,它托管了MainFragment,而MainFragment又托管了DatePi ...

  8. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  9. 解决SpannableString在Android组件间传递时显示失效的问题

    问题:在A activity中传递一个SpannableString到B activity中,并最终传递到B activity中的TextView中,但是没有展示出Span效果. 解决:阅读TextV ...

随机推荐

  1. Svn-在eclipse中安装svn插件

    在eclipse中安装svn有两种方式 1:直接下载svn的插件包安装 使用的版本为1.8.x Links for 1.8.x Release: Eclipse update site URL: ht ...

  2. sql-and、or

    WHERE 指令可以被用来由表格中有条件地选取资料. 这个条件可能是简单的 (像上一页的例子),也可能是复杂的.复杂条件是由二或多个简单条件透过 AND 或是 OR 的连接而成.一个 SQL 语句中可 ...

  3. Lucene 4.7 --创建索引

    Lucene的最新版本和以前的语法或者类名,类规定都相差甚远 0.准备工作: 1). Lucene官方API http://lucene.apache.org/core/4_7_0/index.htm ...

  4. 学习使用Robot Framework自动化测试框架-web元素定位

    转:http://blog.csdn.net/u012145166/article/details/50342569 1.name和id 其中使用到了name和id定位.但有时候由于开发人员的疏忽或者 ...

  5. 【干货】Laravel --实战篇 UUID(唯一识别码)

    前言 : 一般的唯一识别id都是各种时间戳.毫秒级时间戳加php内置函数或者加上随机数等手段来生成的. 下面给大家介绍一个组件,也是我在各个实战项目中必不可少的一个组件,ramsey/uuid.一.r ...

  6. easyUI框架之学习3--表格datagrid

    @model MVCEasyUI.Models.Sale.PageResult<MVCEasyUI.Models.Sale.Order> @{ ViewBag.Title = " ...

  7. ECSHOP管理员密码忘记了怎么办?

    ECSHOP管理员密码忘记了怎么办? ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2013-09-06   不小心在后台把管理员全部给清空了,闹的网站都无法登陆了?有 ...

  8. 关于设置SQLPLUS提示符样式的方法----登陆配置文件,动态加载提示符

    工作中用到 sqlplus mdsoss/mdsoss, 所以来了解一下sqlplus (C shell .cshrc文件里中alisa) 关于设置SQLPLUS提示符样式的方法 12638阅读 1评 ...

  9. CF360B Levko and Array (二分查找+DP)

    链接:CF360B 题目: B. Levko and Array time limit per test 2 seconds memory limit per test 256 megabytes i ...

  10. jQuery1.11源码分析(10)-----Callbacks模块

    Callbacks模块实质上就是一个回调函数队列(当然吹得很牛逼..比如“提供了一种强大的方法来管理回调函数队列”),之所以介绍它是因为后面的Derferred模块基于它. Callbacks生成时接 ...