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 ...
随机推荐
- 读JS高级——第五章-引用类型 _记录
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PowerDesigner-如何导出建表sql脚本
1 按照数据库类型,切换数据库. Database-> Change Current DBMS... 2 生成sql脚本 Database -> Database Generation 的 ...
- 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码
1.首先安装插件 菜单的preference->packages control,然后输入install .. 回车,再输入HTML/CSS/JS prettify 再回车,重启后就可以了. 2 ...
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: ...
- linux下IPTABLES配置详解(转)
如果你的IPTABLES基础知识还不了解,建议先去看看.开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[ ~]# iptables -L -nChain I ...
- 代码注册广播接收者&利用广播调用服务的方法服务声命周期(混合开启)
1)说明文档: 2)效果演示: 3)代码演示:
- 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... 可 ...
- The C Programming Language (second edition) 实践代码(置于此以作备份)
1. #include <stdio.h> #include <stdlib.h> #include <math.h> #include<time.h> ...
- 神器Alfred使用
神器官网:http://www.alfredapp.com/ 许多人装好了之后就再也没有怎么使用过,这软神器, 一直不明白它为什么叫神器,最近研究了一下,真的是,很多东西我们没有好好利用 部分使用功能 ...
- python闭包小例子
------------------ 首先根据实例, 体会一下闭包的效果 ------------------ 定义闭包: def foo(x): a = [0] def bar(y): a[0] = ...