Android Intent引數傳遞,包括物件複雜集合等多方式傳遞
用Intent傳遞資料的時候,如果傳遞的是基本型別,不用說很容易,單個的就是單個的傳,多個就用bundle傳遞,如果傳遞的是物件或者是集合,簡單的某個集合還是可以直接傳的,但是大多數的是不可以傳的。在傳遞物件的時候有兩種方式,一種是實現Parcelable或者Serializable介面序列化物件來傳遞,在傳集合的時候,可能是通過簡單的集合巢狀複雜的集合進行傳遞,但是這些方式都非常的麻煩、複雜,待會我會介紹一種方便簡單的方式。
第一種方式:實現Parcelable或者Serializable介面序列化物件來傳遞
Student實體實現介面Serializable的程式碼
package com.jky.activityparams; import java.io.Serializable; //Serializable 標記介面,標記這個類的例項可以被序列化 public class Student implements Serializable { public String name; public int age; public boolean isSingle = false; public Student(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", isSingle=" + isSingle + "]"; } }
Friend實體實現介面Parcelable的程式碼
package com.jky.activityparams; import android.os.Parcel; import android.os.Parcelable; //實現Parcelable的物件還可以用於垮程序傳輸 //可以用於Java與C++之間的傳輸 //QQ知道QQ音樂播放的當前歌曲 public class Friend implements Parcelable { public String name; public int age; public boolean gender; public Friend(String name, int age, boolean gender) { super(); this.name = name; this.age = age; this.gender = gender; } //必須要有這個靜態屬性 public static final Parcelable.Creator<Friend> CREATOR = new Parcelable.Creator<Friend>() { // 讀 public Friend createFromParcel(Parcel in) { // 按照寫的順序讀取 String name = in.readString(); int age = in.readInt(); int g = in.readInt(); boolean gender = false; if (g == 1) { gender = true; } return new Friend(name, age, gender); } // 便捷方法,快速的建立一個空的陣列 public Friend[] newArray(int size) { return new Friend[size]; } }; // 返回0,描述物件是什麼內容 @Override public int describeContents() { return 0; } // 寫的方法 // writeToParcel實際傳遞的是Parcel @Override public void writeToParcel(Parcel dest, int flags) { // 寫物件的屬性 dest.writeString(this.name); dest.writeInt(this.age); if (this.gender) { dest.writeInt(1); } else { dest.writeInt(0); } } @Override public String toString() { return "Friend [name=" + name + ", age=" + age + ", gender=" + gender + "]"; } }
傳遞方的Activity程式碼,這裡可以不是Activity,這裡的demo寫的是Activity
public void jump(View btn){ //跳轉到SecondActivity //顯示意圖 Intent intent = new Intent(this, SecondActivity.class); //Activity之間傳遞引數 //1.單個引數 //intent.putExtra("name", "許肖華"); //2.多個引數 /*Bundle data = new Bundle(); data.putString("name", "蔣春梅"); data.putInt("age", 18); data.putBoolean("isSingle", false); intent.putExtra("data", data);*/ //3.傳遞Serializable物件 /*Student s = new Student("蔣春梅",18); intent.putExtra("data", s);*/ //4.傳遞parcelable物件 //好處:序列化的效率更高 Friend f = new Friend("袁丁",18,false); intent.putExtra("data", f); startActivity(intent); }
接收方的程式碼
//獲取傳遞的引數
Intent intent = getIntent();
//1.
/*String name = intent.getStringExtra("name");
Log.d("geek", name);*/
//2.Bundle
/*Bundle data = intent.getBundleExtra("data");
String name = data.getString("name");
Log.d("geek", name);*/
//3.Serializable物件
/*Student s = (Student)intent.getSerializableExtra("data");
Log.d("geek", s.toString());*/
//4.parcelable物件
Friend f = intent.getParcelableExtra("data");
Log.d("geek", f.toString());
第一種方式就是這樣通過序列化的方式實現物件的傳遞,供大家瞭解,接下來將介紹第二種簡單的方式第一種方式:通過繼承Application類
在子類中定義公共變數
/***用於物件的傳遞 傳遞完了記得Remove掉*/
public Map<String, Object> datas = new HashMap<>();
傳遞方
EntityTest entityTest = new EntityTest();
caHyApplication1.datas.put("entityTest",entityTest);
接收方
EntityTest entityTest = (EntityTest) caHyApplication.datas.get(name);
獲取到資料之後要記的
caHyApplication.datas.remove(name);
集合物件都可以通過這種方式,因為Application的生命週期是最長的,而且是單例模式。
相關推薦
Android Intent引數傳遞,包括物件複雜集合等多方式傳遞
用Intent傳遞資料的時候,如果傳遞的是基本型別,不用說很容易,單個的就是單個的傳,多個就用bundle傳遞,如果傳遞的是物件或者是集合,簡單的某個集合還是可以直接傳的,但是大多數的是不可以傳的。在傳遞物件的時候有兩種方式,一種是實現Parcelable或者Seriali
一個簡單的Android Intent使用例項,包括顯式/隱式2種呼叫
最近又開始接觸了一下Android,準備將每次寫的小Demo都在這裡備份一下,以防以後忘記了,Demo相對來說都比較簡單,內容也比較片面。今天主要就是練習了一下intent的使用,主要涉及到的知識點有:intent傳值,隱式呼叫。 1.傳值: 傳送端:intent.putE
[iOS]關於 App 混合(Hybrid)開發的優化,包括H5、Weex等(本篇博客主要針對 iOS 應用講解,但該思想同樣適用於Android)
color 數據 後臺 lib 新版 生成 下載地址 代碼 版本 我們知道混合開發,可以節省很多成本(時間成本,經濟成本等等),所以有很多公司比較鐘愛這種開發形式,今天所講的優化方式,也是我在我們公司的應用中實際用了的,而且我寫的這個優化的 SDK 已經開源到 gith
JAVA基礎-6.二維陣列,值傳遞,面向物件
1:二維陣列(理解) (1)元素是一維陣列的陣列。 (2)格式: A:資料型別[][] 陣列名 = new 資料型別[m][n]; m:表示這個二維陣列有多少個一維陣列。 n:表示每一個一維陣列的元素有多少個。
android本地、sd卡儲存物件或集合,以及讀取該物件
<!-- 在SDCard中建立與刪除檔案的許可權 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
關於android 圓角的問題,包括圓角Imageview的顯示問題。
開發中經常會遇到需要圓角的問題。我們解決的途徑無非就是幾種: 1.自定義圓角view。 2.Glide載入圓角。 3.寫drawable的shape檔案來定義圓角資原始檔。 4.控制元件的背景用設計切的圓角圖片替代。 這裡討論情況1,3 遇到的問題,如下: 1.自
Android螢幕適配,包括全面屏適配,自定義適配
在此處列出一些簡單的配置圖 點選下載配置檔案 //文件就在下邊,不用下載 原理: 1. px是解析度的單位 比如現在主流手機解析度1080*1920. 2. dp是安卓開發
畫一個乘坐地鐵的流程圖,從購票到搭乘地鐵的過程,包括安檢、購票等(網易-2013)
中轉 人工 路線 提示 但是 情況 -a 公交 四種 (1)安檢 作用:防止乘客攜帶危險物品上車,包括汽油、刀類等,保障公共安全。 需要考慮乘客分類:1)有包的乘客:需要接受安檢。 2)無包的乘客:直接通行,可略過此步驟。當然,特殊時期(警備要求特別高),有時候會對每一個乘
C#+AE地圖文件的相關操作,包括新建開啟儲存等
public static bool NewMxdFile(string filePath)//新建工作空間 { try { string tmp_fileName = fileP
【原創】可修改==不可做index/key,可下標==有index/key==可查詢:嘗試 list tuple dict set的巢狀,包括str 和 int等
語法總結 1 再確認一次,在語言使用時 "string " 等同於 'string' 沒區別 2 無論tuple ,list , dict 本身是用不同的符號() [ ] {},但是引用 index/key 都使用 [ ] tuple
Jsp頁面傳Json資料到服務端,轉物件或集合進行資料處理
需求:1、將頁面資料帶到服務端並轉成物件,2、將頁面的集合資料帶到服務端轉List 實現:用ajax請求傳遞資料,資料格式為json JS方法: testJsonMethod = function(
iOS10訪問許可權的配置(解決訪問奔潰問題,包括相簿/相機等)
這裡僅以相簿的為例: plist檔案裡面新增,Privacy - Photo Library Usage Description,Value值為描述,彈出的提示框會顯示出來。 修改plist 升到iOS10之後,需要設定許可權的有: 麥克風許可權:Privac
Android中Intent傳遞自定義物件型別的資料
Android中Intent是用來實現元件之間的通訊的,可以在元件之間傳遞資料。可以傳遞一些基本型別的資料,也可以傳遞自定義物件型別的資料,但是如果要傳遞自定義型別的物件資料,這個自定義型別的物件必須是實現了Serializable介面或者是實現Parcelab
Jersey使用總結一(jersey初步使用和簡單post請求幾種引數傳遞,String方式,不含物件操作)
首先說明一下,jersey是幹什麼的呢,我個人的理解就是類似於一種webservice技術或框架 jersey-rest為service端,其它的jersey請求為客戶端,客戶端傳送一個請求(帶參或不帶參)呼叫service端的方法,方法返回結果給客戶端。 如以下使用步奏
Java傳遞基本型別:值傳遞,物件作為引數:引用傳遞
值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方
android intent傳遞物件和集合
傳遞物件 Article article =JsonUtils.getArticle(content); intent =newIntent(activity,Compositi
《老羅Android第二季》wifi、Intent傳遞自定義物件
1. Wifi 的操作 掃描wifi的情況,並判斷是否連線。 在佈局檔案中,加入一個開關按鈕: <Switch android:id="@+id/switch1" android:layout_width="wrap_content"
Android 批量設定監聽器,監聽器傳遞引數,重寫監聽器建構函式
這個問題困擾了我好幾天,就在我做的課程表應用中,每個頁面有15個TextView,每個都要設定監聽器,但是這還不是難事,難的是,用匿名內部類實現監聽藉口的時候,還要再在裡面設定監聽器!簡而言之,TextView長按變為EditText,EditText點選完成之後把值傳回T
js 與 android 的互動(方法互呼叫) 和android向 js傳遞值, js向android傳引數 事件攔截看上一篇
mail_detail_v2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpor
android intent 傳遞list 或 物件 (轉)
當然這些Object是有一定的條件的,前者是實現了Serializable介面,而後者是實現了Parcelable介面 方法四: 用intent傳來傳去 覺得不方便 我們可以寫一個在application裡面的全域性資料 1、建立一個屬於你自己的android.app.Application的子類 2、在