編輯:Android資訊
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進行設置和獲取。
Google近期在Udacity上發布了Android性能優化的在線課程,分別從渲染,運算與內存,電量幾個方面介紹了如何去優化性能,這些課程是Google之前在Y
TableLayout是一個以行、列顯示視圖View的視圖組 1、開始一個新的工程,名字叫做HelloTableLayout 2、打開res/layout/mai
不廢話,先看效果,嗯…看起來有點卡,截圖軟件的問題: 圖中普通列表是ListView樣式,沒有設置Header和Footer時使用默認的下拉刷新和上
前言 本篇博客紀錄使用Android Studio對項目進行簽名打包,跟Eclipse大同小異,讀者朋友注意其中到差別。 第一步 創建簽名文件 第二步 填寫