Android Fragment间对象传递
由于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间对象传递的更多相关文章
- Servlet页面间对象传递的方法
Servlet页面间对象传递的方法 1.request 2.session 3.application 4.cookie 5.其它的
- Android - fragment之间数据传递
<Fragment跳转时传递参数及结果回传的方法> <Fragment详解之五——Fragment间参数传递> <Android解惑 - 为什么要用Fragment.se ...
- jsp页面间对象传递方法
严格的来说不能叫做JSP页面间的对象传递,实际应该是页面间对象共享的方法: 1. 通过servletcontext,也就是application对象了,但这种情况要求在同一个web应用下, ...
- android Fragment的数据传递
Bundle传递参数 Fragment1 fragment1 = new Fragment1();Bundle bundle = new Bundle();bundle.putString(" ...
- Android Fragment间的广播消息接收
这种方式不用在配置文件加东西,我比较喜欢. 广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里. LocalBroadcastM ...
- android active间数据传递
Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...
- fragment间的数据传递
今天我将要讲的是fragment间的数据是如何进行传递的.这里我将举个简单的例子. 首先要有个MainActivity,它托管了MainFragment,而MainFragment又托管了DatePi ...
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- 解决SpannableString在Android组件间传递时显示失效的问题
问题:在A activity中传递一个SpannableString到B activity中,并最终传递到B activity中的TextView中,但是没有展示出Span效果. 解决:阅读TextV ...
随机推荐
- zabbix_agent安装(Centos+Ubuntu)
Centos安装 安装依赖包 yum -y install mysql-devel libcurl-devel net-snmp-devel 添加用户 groupadd zabbix use ...
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...
- codevs 1690 开关灯 线段树水题
没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...
- 大概了解了flexbox
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- WeakHashMap和HashMap的区别
看Java源码的时候,看到了 WeakHashMap ,我一直以来使用的 都是 HashMap,于是查了一下两者的区别 (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基 ...
- Java-HashMap和HashTable的区别
类继承and实现上看 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable ...
- 【CodeForces 616D】Longest k-Good Segment
题意 n个数里,找到最长的一个连续序列使里面最多k个不同的数. 分析 尺取法,每次R++,如果第R个数未出现过,那么不同的数+1,然后这个数的出现次数+1,如果不同的数大于k了,那就要去掉第L个数,直 ...
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...
- 装了虚拟机,但是没有虚拟网卡vmnet0 vmnet1 vmnet8
在服务里面启动图中的两个服务,在再你的虚拟网络编辑器里面点恢复默认设置就会出现了,我的是win8.1,默认这两个服务是手动启动的,可能是优化软件优化的结果 我是win10 里面显示以太网3 和 4, ...
- UVA1262Password(第K字典序)
题目链接 紫书P323 题意:两个6*5的字母矩阵,两个矩阵每列相同的字母,每列取一个,求按照字典序第k小的序列 分析: 对于第一个样例来说,我们得到{ACDW}.{BOP}.{GMOX}.{AP}. ...