【轉】Intent傳遞數據時,可以傳遞哪些類型數據?


在Android應用的開發中,如果我們需要在不同的模塊(比如不同的Activity之間)之間傳遞數據,通常有以下兩種方法:
1. 利用Intent對象攜帶數據
通過查詢Intent/Bundle的API文檔,我們可以獲知,Intent/Bundle支持傳遞基本類型的數據和基本類型的數組數據,以及String/CharSequence類型的數據和String/CharSequence類型的數組數據。

而對於其它類型的數據貌似無能為力,其實不然,我們可以在Intent/Bundle的API中看到Intent/Bundle還可以傳遞Parcelable(包裹化,郵包)和Serializable(序列化)類型的數據,以及它們的數組/列表數據。

所以要讓非基本類型和非String/CharSequence類型的數據通過Intent/Bundle來進行傳輸,我們就需要在數據類型中實現Parcelable接口或是Serializable接口。

 

1.1 利用Parcelable接口實現數據通過Intent/Bundle進行傳遞

/**

 * 代表一個人的信息

 * @author gansc

*/

public class PersonInfo implements Parcelable

{

public String iName; // 人名

publicint iSex; // 性別    

public String iId; // 身份證號碼    

public String iMobileNumber; // 手機號碼    

public String iEMailAddr; // 郵箱地址

// From Parcelable

    @Override

publicint describeContents()

    {

return0;

}

    // From Parcelable

// 保存到包裹中

    @Override

publicvoid writeToParcel(Parcel dest, int flags)

    {

        dest.writeString(iName);

        dest.writeInt(iSex);

        dest.writeString(iId);

        dest.writeString(iMobileNumber);

        dest.writeString(iEMailAddr);

    }

// 實現Parcelable接口的類型中,必須有一個實現了Parcelable.Creator接口的靜態常量成員字段,

// 並且它的名字必須為CREATOR的

publicstaticfinal Parcelable.Creator<PersonInfo> CREATOR 

=new Parcelable.Creator<PersonInfo>()

    {

// From Parcelable.Creator

        @Override

public PersonInfo createFromParcel(Parcel in)

        {

            PersonInfo brief =new PersonInfo();

// 從包裹中讀出數據

            brief.iName = in.readString();

            brief.iSex = in.readInt();

            brief.iId = in.readString();

            brief.iMobileNumber = in.readString();

            brief.iEMailAddr = in.readString();

return brief;

        }

        // From Parcelable.Creator

        @Override

        public PersonInfo[] newArray(int size)

        {

            returnnew PersonInfo[size];

        }

    };

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM