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

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

  原有Article类

  1. package com.example.news.andoridnewsapp;
  2.  
  3. public class Article {
  4. private String title;
  5. private String linkmd5;
  6. private String link;
  7. private String desc;
  8.  
  9. public String getLinkmd5() {
  10. return linkmd5;
  11. }
  12.  
  13. public void setLinkmd5(String linkmd5) {
  14. this.linkmd5 = linkmd5;
  15. }
  16.  
  17. public String getLink() {
  18. return link;
  19. }
  20.  
  21. public void setLink(String link) {
  22. this.link = link;
  23. }
  24.  
  25. public String getDesc() {
  26. return desc;
  27. }
  28.  
  29. public void setDesc(String desc) {
  30. this.desc = desc;
  31. }
  32.  
  33. public String getTitle() {
  34.  
  35. return title;
  36. }
  37.  
  38. public void setTitle(String title) {
  39. this.title = title;
  40. }
  41. }

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

  1. package com.example.news.andoridnewsapp;
  2.  
  3. public class Article implements Serializable {
  4. private String title;
  5. private String linkmd5;
  6. private String link;
  7. private String desc;
  8.  
  9. public String getLinkmd5() {
  10. return linkmd5;
  11. }
  12.  
  13. public void setLinkmd5(String linkmd5) {
  14. this.linkmd5 = linkmd5;
  15. }
  16.  
  17. public String getLink() {
  18. return link;
  19. }
  20.  
  21. public void setLink(String link) {
  22. this.link = link;
  23. }
  24.  
  25. public String getDesc() {
  26. return desc;
  27. }
  28.  
  29. public void setDesc(String desc) {
  30. this.desc = desc;
  31. }
  32.  
  33. public String getTitle() {
  34.  
  35. return title;
  36. }
  37.  
  38. public void setTitle(String title) {
  39. this.title = title;
  40. }
  41. }

  Fragment1进行参数传递

  1. ArticleConententFragment fragment = new ArticleConententFragment();
  2. Bundle args = new Bundle();
  3. args.putSerializable(ARG_ARTICLE, article);
  4.  
  5. fragment.setArguments(args);

  Fragment2进行参数的接收

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

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

  1. package com.example.news.andoridnewsapp;
  2.  
  3. import android.os.Bundle;
  4. import android.os.Parcel;
  5. import android.os.Parcelable;
  6.  
  7. //public class Article implements Serializable {
  8. public class Article implements Parcelable {
  9. private String title;
  10. private String linkmd5;
  11. private String link;
  12. private String desc;
  13.  
  14. public String getLinkmd5() {
  15. return linkmd5;
  16. }
  17.  
  18. public void setLinkmd5(String linkmd5) {
  19. this.linkmd5 = linkmd5;
  20. }
  21.  
  22. public String getLink() {
  23. return link;
  24. }
  25.  
  26. public void setLink(String link) {
  27. this.link = link;
  28. }
  29.  
  30. public String getDesc() {
  31. return desc;
  32. }
  33.  
  34. public void setDesc(String desc) {
  35. this.desc = desc;
  36. }
  37.  
  38. public String getTitle() {
  39.  
  40. return title;
  41. }
  42.  
  43. public void setTitle(String title) {
  44. this.title = title;
  45. }
  46.  
  47. @Override
  48. public String toString() {
  49. return this.title;
  50. }
  51.  
  52. @Override
  53. public int describeContents() {
  54. return 0;
  55. }
  56.  
  57. @Override
  58. public void writeToParcel(Parcel dest, int flags) {
  59. Bundle bundle = new Bundle();
  60. bundle.putString("title", getTitle());
  61. bundle.putString("desc", getDesc());
  62. bundle.putString("link", getLink());
  63. bundle.putString("linkmd5", getLinkmd5());
  64. dest.writeBundle(bundle);
  65. }
  66.  
  67. public static final Creator<Article> CREATOR = new Creator<Article>() {
  68. @Override
  69. public Article createFromParcel(Parcel source) {
  70. Bundle bundle = source.readBundle();
  71. Article article = new Article();
  72. article.setTitle(bundle.getString("title"));
  73. article.setDesc(bundle.getString("desc"));
  74. article.setLink(bundle.getString("link"));
  75. article.setLinkmd5(bundle.getString("linkmd5"));
  76. return article;
  77. }
  78.  
  79. @Override
  80. public Article[] newArray(int size) {
  81. return new Article[size];
  82. }
  83. };
  84. }

  Fragment1进行参数传递

  1. ArticleConententFragment fragment = new ArticleConententFragment();
  1. Bundle args = new Bundle();
  2. //args.putSerializable(ARG_ARTICLE, article);
  3. args.putParcelable(ARG_ARTICLE, article);
  4.  
  5. fragment.setArguments(args);

  Fragment2进行参数接收

  1. // mArticle = (Article) getArguments().getSerializable(ARG_ARTICLE);
  2. 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. 读JS高级——第五章-引用类型 _记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. PowerDesigner-如何导出建表sql脚本

    1 按照数据库类型,切换数据库. Database-> Change Current DBMS... 2 生成sql脚本 Database -> Database Generation 的 ...

  3. 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码

    1.首先安装插件 菜单的preference->packages control,然后输入install .. 回车,再输入HTML/CSS/JS prettify 再回车,重启后就可以了. 2 ...

  4. BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴

    与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit:  ...

  5. linux下IPTABLES配置详解(转)

    如果你的IPTABLES基础知识还不了解,建议先去看看.开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[ ~]# iptables -L -nChain I ...

  6. 代码注册广播接收者&利用广播调用服务的方法服务声命周期(混合开启)

    1)说明文档: 2)效果演示: 3)代码演示:

  7. another app is currently holding the yum lock;waiting for it to exit解决

    有时用yum升级一些文件时,会出现以下情况:   another app is currently holding the yum lock;waiting for it to exit...   可 ...

  8. The C Programming Language (second edition) 实践代码(置于此以作备份)

    1. #include <stdio.h> #include <stdlib.h> #include <math.h> #include<time.h> ...

  9. 神器Alfred使用

    神器官网:http://www.alfredapp.com/ 许多人装好了之后就再也没有怎么使用过,这软神器, 一直不明白它为什么叫神器,最近研究了一下,真的是,很多东西我们没有好好利用 部分使用功能 ...

  10. python闭包小例子

    ------------------ 首先根据实例, 体会一下闭包的效果 ------------------ 定义闭包: def foo(x): a = [0] def bar(y): a[0] = ...