1. 程式人生 > >【Android資料傳遞】Intent傳遞List和Object和List(附原始碼)

【Android資料傳遞】Intent傳遞List和Object和List(附原始碼)

一、傳遞List

傳遞List<String>的方法

ArrayList<String> info = new ArrayList<String>();

info.add(name);

info.add(website);

info.add(weibo);

Intent intent = new Intent(MainActivity.this, ResultActivity.class);

intent.putStringArrayListExtra("infoList", info);

startActivity(intent);

  接收List<String>的方法

 ArrayList<String> infoList = new ArrayList<String>();

 infoList = getIntent().getStringArrayListExtra("infoList");

  傳遞List<Integer>的方法

intent.putIntegerArrayListExtra(key, list);

  接收List<Integer>的方法

list =(ArrayList<Integer>) getIntent().getIntegerArrayListExtra(key);

  二、傳遞Object

有兩種方式來傳遞Object:Serializable和Parcelable

2.1 使用Serializable方式

前提:Object需要實現Serializable介面 用Serializable方式傳遞Object的語法:bundle.putSerializable(key,object); 用Serializable方式接收Object的語法:object=(Object) getIntent().getSerializableExtra(key); 實現Serializable介面就是把物件序列化,然後再傳輸,和Java的常用程式設計沒什麼明顯區別,而且Object不需要明顯改變,推薦用這種方式。

Object實現Serializable

package com.wirelessqa.testintent;

import java.io.Serializable;

/**
 * OBJECT實現SERIALIZABLE
 * @author bixiaopeng 2013-2-18 上午11:32:19
 */
public class SerInfo implements Serializable {

    private String name;
    private String website;
    private String weibo;
    public SerInfo(){}

    public SerInfo(String name, String website, String weibo){
        this.name = name;
        this.website = website;
        this.weibo = weibo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    public String getWeibo() {
        return weibo;
    }

    public void setWeibo(String weibo) {
        this.weibo = weibo;
    }

}

用Serializable方式傳遞Object

SerInfo serInfo = new SerInfo(name, website, weibo);
                Intent intent = new Intent();
                Bundle bundle = new Bundle();
                bundle.putSerializable("serinfo", serInfo);
                intent.setClass(MainActivity.this, ResultActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);

用Serializable方式接收Object

//獲得Serializable方式傳過來的值
        SerInfo serInfo = (SerInfo) getIntent().getSerializableExtra("serinfo");

2.2 使用Parcelable方式

前提:Object需要實現Parcelable介面 用Parcelable方式傳遞Object的語法:bundle.putParcelable(key,object); 用Parcelable方式接收Object的語法:object=(Object) getIntent().getParcelableExtra(key);
實現Parcelable介面的類比較複雜,Parcelable是個什麼東西呢?
Android提供了一種新的型別:Parcel,被用作封裝資料的容器,封裝後的資料可以通過Intent或IPC傳遞。 除了基本型別以外,只有實現了Parcelable介面的類才能被放入Parcel中。
實現Parcelable介面需要實現三個方法: 1)writeToParcel方法。該方法將類的資料寫入外部提供的Parcel中。
宣告:writeToParcel(Parcel dest, int flags)。
2)describeContents方法。直接返回0就可以。
3)靜態的Parcelable.Creator<T>介面,本介面有兩個方法:createFromParcel(Parcel in) 實現從in中創建出類的例項的功能。
     newArray(int size) 建立一個型別為T,長度為size的陣列, returnnew T[size];即可。本方法是供外部類反序列化本類陣列使用。

Object需要實現Parcelable介面

package com.wirelessqa.testintent;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Object需要實現Parcelable介面
 * @author bixiaopeng 2013-2-18 上午11:32:19
 */
public class ParInfo implements Parcelable{
    private String name;
    private String website;
    private String weibo;
    public ParInfo(){

    }
    public ParInfo(String name, String website, String weibo){
        this.name = name;
        this.website = website;
        this.weibo = weibo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    public String getWeibo() {
        return weibo;
    }

    public void setWeibo(String weibo) {
        this.weibo = weibo;
    }
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    //該方法將類的資料寫入外部提供的Parcel中。
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(website);
        dest.writeString(weibo);
    }

    public static final Parcelable.Creator<ParInfo> CREATOR  = new Creator<ParInfo>() {
        //實現從source中創建出類的例項的功能
        @Override
        public ParInfo createFromParcel(Parcel source) {
            ParInfo parInfo  = new ParInfo();
            parInfo.name = source.readString();
            parInfo.website= source.readString();
            parInfo.weibo = source.readString();
            return parInfo;
        }
        //建立一個型別為T,長度為size的陣列
        @Override
        public ParInfo[] newArray(int size) {
            return new ParInfo[size];
        }
    };   

}

用Parcelable方式傳遞Object

                ParInfo parInfo = new ParInfo(name, website, weibo);
                Intent intent = new Intent();
                Bundle bundle = new Bundle();
                bundle.putParcelable("parinfo", parInfo);// 這裡呼叫了writeToParcel方法,向dest寫資料
                intent.setClass(MainActivity.this, ResultActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);

用Parcelable方式接收Object

//獲得Parcelable方式傳過來的值
        ParInfo parInfo = (ParInfo) getIntent().getParcelableExtra("parinfo");//這裡呼叫了UsercreateFromParcel方法,返回ParInfo例項

 三、傳遞List<Object>

傳遞List<Object>的方法

                ArrayList<SerInfo> listObj = new ArrayList<SerInfo>();

                SerInfo serInfo1 = new SerInfo(name, website, weibo);

                SerInfo serInfo2 = new SerInfo(name, website, weibo);

                listObj.add(serInfo1);

                listObj.add(serInfo2);

                Intent intent = new Intent();

                intent.setClass(MainActivity.this, ResultActivity.class);

                intent.putExtra("listobj", (Serializable) listObj);

                startActivity(intent);

接收List<Object>的方法

//獲得傳過來的List<Object>

        ArrayList<SerInfo> listObj =  (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj");

原始碼下載:http://pan.baidu.com/share/link?shareid=266032&uk=436271564

相關推薦

Android資料傳遞Intent傳遞ListObjectList(原始碼)

一、傳遞List 傳遞List<String>的方法 ArrayList<String> info = new ArrayList<String>(); info.add(name); info.add(website); inf

Android-資料報表初級篇[讓Highcharts報表顯示在Android螢幕]

 Highcharts 報表是至今我發現做得最好的報表之一。當然,可能還有更好的我沒發現。 此次我們就說說怎麼讓Highcharts顯示在Android裝置上。 首先可以在官網檢視文件[官方文件]此次

Android資料傳遞全域性變數的使用方法(原始碼)

android中Application是用來儲存全域性變數的,在package建立的時候就存在了,到所有的activity都被destroy掉之後才會被釋放掉。所以當我們需要全域性變數的時候只要在application中去實現,通過呼叫Context的getApplica

單調佇列DP烽火傳遞

** 1565 – 【堆練習】烽火傳遞3577 ** Description   烽火臺是重要的軍事防禦設施,一般建在交通要道或險要處。一旦有軍情發生,則白天用濃煙,晚上有火光傳遞軍情。在某兩個城市之間有n(n<=200000)座烽火臺,每個烽火臺發出訊號

Android音視訊TS流資料解析Jni2Java回撥

為了解析傳輸到手機的TS流有效視訊資料,進行預覽播放和錄製等功能,在網上看到的部分關於android播放TS流,如UDP預覽播放,採取的方式真是夠標新立異,如通過儲存到本地ts檔案然後播放,會有閃屏現象等,當然也有很多的播放器支援播放,如ffmepg-and

洛谷P2661資訊傳遞

題目大意:給定一個有 N 個點,N 條邊且每個點的出度均為 1 的有向圖,求該有向圖的一個最小環。 題解:由於每個點的出度均為 1,可知可能的情況只有以下幾種:一個環或多個環,一個環+一條鏈。因此,可以採用 Tarjan 縮點,求出每個強連通分量,更新答案貢獻。另外,學到了一種並查集做法,由於每條邊的出度均

洛谷P2661資訊傳遞 (updated)

題目大意:給定一棵 N 個節點的內向樹森林,求該內向樹森林的最小環的大小(按邊計算)。 題解:先刪鏈,再計算環的大小,統計答案即可。 程式碼如下 #include <bits/stdc++.h> using namespace std; const int maxn=2e5+10; int

Android 學習記錄JsonObject解析JSON資料

public class JsonObject { private static final String TAG = "JsonObject"; private void send

Android 開發教程使用Intent傳送簡訊

本章節翻譯自《Beginning-Android-4-Application-Development》,如有翻譯不當的地方,敬請指出。使用SmsManager類,可以在自己編寫的程式內部發送簡訊,而不需要呼叫系統的簡訊應用。然而,有的時候呼叫系統內建的簡訊應用會更加方便。這時

Android開發-5界面裝修,五大布局你選誰

比例 技術分享 article 嵌套 content java lin layout mark 前言:假設要開一家店,門店裝修是非常重要的事情。有錢都請專門的建築設計公司來設計裝修,沒錢的僅僅能自己瞎折騰。好不好看全憑自己的感覺。像Android開發。在移動端大家看到的

Android 應用開發 ActionBar 樣式具體解釋 -- 樣式 主題 簡單介紹 Actionbar 的 icon logo 標題 菜單樣式改動

detail sub str 進度條 代碼分析 extc dst 模式 html 作者 : 萬境絕塵 ([email protected]/* */)轉載請著名出處 : http://blog.csdn.net/shulianghan/article/deta

Android進階(3)Android圖像處理

progress chang etc geo xtend static ogr arch 取出 1. 概念 色調/色相:物體傳遞的顏色 飽和度:顏色的純度,從0(灰)到100%(飽和)來進行描寫敘述 亮度/明度:顏色的相對明暗程度 2. 調整圖像小Demo 創建一個

Android進階Junit單元測試環境搭建以及簡單有用

rar theme 選擇 http 技術分享 才幹 ack package family 單元測試的目的 首先。Junit單元測試要實現的功能,就是用來測試寫好的方法是否可以正確的運行,一般多用於對業務方法的測試。 單元測試的環境配置 1.在Andro

Android高級NDK/JNI編程技術基礎介紹

data jint man 搭建 原理 編程 java代碼 rom pat 作為一個Andoird的Java程序猿,會受到Java語言的局限。由於作為一面門向對象的語言不能像C/C++那樣輕易調用與硬件有關的操作。因此JNI就搭建了這樣一

Android 進階圖片載入框架之Glide

生活 cannot 簡單介紹 style codes 詳細 npr 濾鏡 ive 簡單介紹 在泰國舉行的谷歌開發人員論壇上,谷歌為我們介紹了一個名叫 Glid

Android學習筆記Android Studio簡單斷點調試

分享 遇到 跟著 相關 斷點調試 .com 完整 android學習 force 首先點擊斷點調試按鈕運行App 啟動之後,會彈出如下圖的提示框,不要管,幾秒之後這個彈框會自動消失,然後App會成功運行。 下面介紹一下斷點調試的相關操作按鈕對應的功能: 按鈕1的功能:

Android開源庫美團等APP城市選擇

data- pac 就是 blank all ike 需要 高德 city CityPicker 現在使用比較多的類似美團等APP的城市選擇界面. 2步即可實現,就是這麽簡單粗暴! Gif image APK 下載demo.apk體驗. Install Gradle

Android開發經驗android:windowSoftInputMode屬性具體解釋

中一 mtk wid water ren 而是 orien 表示 不能 本文章來自CSDN博客:http://blog.csdn.net/zhaokaiqiang1992。轉載請註明地址! 在前面的一篇文章中,簡單的介紹了一下怎樣實現軟鍵盤不自己主動彈出,使

WXS資料型別Number

Number包括整數與小數。 屬性: 名稱 返回 說明 [Number].constructor 值為字串“Number” 返回該型別的結構字串   方法: 原型:[Number].to

WXS資料型別String

 屬性: 名稱 值型別 說明 [String].constructor [String] 返回值為“String”,表示型別的結構字串 [String].length [Number]