1、Intent 可以傳遞的數(shù)據(jù)類型
在 Intent和IntentFilters(1) 中我們知道了通過 Intent 的putExtra( ) 方法可以實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞。那么putExtra( ) 方法能夠傳遞的數(shù)據(jù)類型由哪些限制呢?
下面這張圖是我從AndroidSrudio中截取的,這張圖里列出了所有可以通過intent傳遞的數(shù)據(jù)類型。

根據(jù)這張圖可以看出,intent 對(duì)象可以傳遞的具體數(shù)據(jù)類型以及使用的方法。
(1) putExtra( key , value ) 方法
- 可以傳遞 8 種基本數(shù)據(jù)類型以及這八種基本數(shù)據(jù)類型的數(shù)組,
- 可以傳遞 Serializable 實(shí)現(xiàn)類的對(duì)象,
- 可以傳遞Parcelable 實(shí)現(xiàn)類的對(duì)象和數(shù)組,
- 可以傳遞Bundle 對(duì)象
(2) putExtras( value )方法
- 可以傳遞Bundle 對(duì)象,
- 可以傳遞Intent 對(duì)象
(3) Intent 也可以直接傳遞集合
- 傳遞 Integer類型 的集合可以直接使用:putIntegerArrayListExtra( key,value)
- 傳遞 String 類型 的集合可以直接使用: putStringArrayListExtra( key , value)
- 傳遞 CharSequence 類型 的集合可以直接使用: putCharSequenceArrayList( key , value)
- 傳遞 ** Parcelable 類型** 的集合可以直接使用 :putParcelableArrayList( key,value)
2 Intent 傳遞數(shù)據(jù)的示例代碼
(1) 傳遞基本數(shù)據(jù)類型數(shù)據(jù)
- IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
intent.putExtra("name","張三");
startActivity(intent);
}
});
}
}
putExtra(key,value) 中兩個(gè)參數(shù)的含義分別是:
- “name” , 表示 鍵名,TestActivity中獲取數(shù)據(jù)時(shí)要以鍵名為條件;
- “張三”,表示具體要傳遞的值,需要注意的是,這里的值是什么類型,在 TestActivity 中就要用對(duì)應(yīng)類型的getXXXExtra( key ) 來取值,XXX就是這里值的數(shù)據(jù)類型。具體參考下面的代碼
- TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
//getIntent 獲取上一個(gè)界面?zhèn)鬟f的intent對(duì)象,然后用 getStringExtra( ) 拿到具體數(shù)據(jù)
String name = getIntent().getStringExtra("name");
Toast.makeText(this, "獲取到上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù)是:" + name, Toast.LENGTH_SHORT).show();
}
}
在這段代碼中,先通過getIntent( )方法獲取到上一個(gè)界面?zhèn)鬟f的intent對(duì)象,然后由于intent 中傳遞的數(shù)據(jù)是字符串類型的“ 張三”,所以此處使用getStringExtra( key) 來獲取數(shù)據(jù),又由于 intent中定義的鍵名是“name” ,所以此處getStringExtra( ) 傳入的參數(shù)就是 name.
(2) 傳遞基本數(shù)據(jù)類型的數(shù)組
- IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
String[] names = new String[]{"張三", "李四", "王五", "趙二麻子"};
intent.putExtra("namesArray", names);
startActivity(intent);
}
});
}
}
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
String []names = getIntent().getStringArrayExtra("namesArray");
//字符串?dāng)?shù)組轉(zhuǎn)字符串,并將兩端的[] 替換掉
String str=Arrays.toString(names).replaceAll("[\\[\\]\\s,]", "");
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):",str);
}
}
>注意:
> * 在接收方獲取intent 中傳遞的數(shù)組時(shí)需要使用 getXXXArrayExtra(key), XXX由數(shù)組的成員類型決定,key 就是 intent 中putExtra()中的key.
> * 將數(shù)組轉(zhuǎn)成字符串的時(shí)候,可以直接使用 Arrays.toString( ) ,傳入要轉(zhuǎn)換的數(shù)組;使用這個(gè)方法轉(zhuǎn)換之后,會(huì)在兩端帶有 [ ] , 所以可以使用 replaceAll("[\\[\\]\\s,]", "") 將其替換成空串。
###(3) 傳遞 bean 對(duì)象
如果需要使用 intent 傳遞一個(gè)bean對(duì)象,有如下幾種方式:
>* A
讓該bean 類實(shí)現(xiàn)Serializable 接口,然后使用putExtra( key,value)傳遞
* B
讓bean 實(shí)現(xiàn)Parcelable 接口,然后使用putExtra( key,value)傳遞
* C
將bean對(duì)象中的數(shù)據(jù)分別通過Bundle對(duì)象的putXXX( )方法存進(jìn)bundle 對(duì)象,然后在用intent 的puExtra(key,bundle) 或 putExtras(bulde) 方法傳遞bundle對(duì)象。(這種方法不如前兩種來的直接,所以,我一般不喜歡這種)
####1)讓bean 類實(shí)現(xiàn)Serializable 接口
Serializable 表示序列化,普通的bean類直接實(shí)現(xiàn)Serializable 接口后就可以將該bean類 的對(duì)象序列化成可存儲(chǔ)或者可傳輸?shù)臓顟B(tài)。(普通的bean類不可以直接在組件之間傳輸)
* 創(chuàng)建User 類,讓該類實(shí)現(xiàn)Serializable 接口
public class User implements Serializable {
public String name;
public String sex;
public int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
User user = new User();
user.setAge(27);
user.setName("張三");
user.setSex("女");
//直接將user對(duì)象作為value
intent.putExtra("SerializableBean", user);
startActivity(intent);
}
});
}
}
* TestActivity.java
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
User user = (User) getIntent().getSerializableExtra("SerializableBean");
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):",user.getName()+user.getAge()+user.getSex());
}
}
* Log 中的結(jié)果:

> 這里并沒有什么特殊的,只是單純的讓一個(gè)普通的bean類實(shí)現(xiàn)了Serializable 接口,這樣就可以 用 intent 傳遞這個(gè)bean 類的對(duì)象了。
> 在接收數(shù)據(jù)的時(shí)候,我們使用的是getSerializableExtra( )方法,得到一個(gè)Serializable 對(duì)象,然后向下強(qiáng)轉(zhuǎn)得到 user 對(duì)象
####2) 讓bean 實(shí)現(xiàn)Parcelable 接口
parcel 是打包的意思,所以parcelable 也就是可以打包的,與Serializable 相反,Parcelable 是將bean 類中的數(shù)據(jù)拆分之后,重新打包并存儲(chǔ)進(jìn)Parcel 類中。
* 創(chuàng)建User類,讓User類實(shí)現(xiàn)Parcelable 接口,并重寫方法
public class User implements Parcelable {
public String name;
public String sex;
public int age;
public boolean isAdult;
public boolean getIsAdult() {
return isAdult;
}
public void setIsAdult(boolean isAdult) {
this.isAdult = isAdult;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public int describeContents() {
return 0; //直接返回0就好
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//將數(shù)據(jù)寫到Parcel中
dest.writeString(name);
dest.writeString(sex);
dest.writeInt(age);
//boolean類型的數(shù)據(jù)使用這種方式write到parcel中
dest.writeByte(isAdult ? (byte) 1 : (byte) 0);
}
// 創(chuàng)建Creator 常量,讀取Parcel 中的數(shù)據(jù)
public static final Parcelable.Creator<User> CREATOR= new Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
User user=new User();
user.name=source.readString();
user.sex=source.readString();
user.age=source.readInt();
//boolean 類型的數(shù)據(jù)使用這種方式讀取
user.isAdult=source.readByte()==1;
return user;
}
@Override
public User[] newArray(int size) {
return new User[size]; //返回一個(gè)size 大小的 User數(shù)組
}
};
}
> 注意:
A:
我們讓User類實(shí)現(xiàn)了Parcelable接口之后,需要重寫其中的describeContents()方法,該方法的返回值通常直接給0就好;需要重寫writeToParcel( ) ,將user 對(duì)象中的數(shù)據(jù)存儲(chǔ)到Parcel 中;最后還需要?jiǎng)?chuàng)建一個(gè) Parcelable.Creator 類型的常量,并在Creator 的構(gòu)造方法中的createFromParcel( ) 方法中,讀取存儲(chǔ)在Parcel 中的數(shù)據(jù),**此處尤為注意:readXXX ( )的順序必須和writeXXX( )的順序保持一致,否則數(shù)據(jù)會(huì)錯(cuò)位**
>B:
writeToParcel( ) 方法中,我們要寫到Parcel中的數(shù)據(jù)是什么類型,那么就用什么類型的writeXXX 。比如,我們定義的name 是String 類型,那么就需要使用writeString( name) ;同理,在createFromPacel( ) 中讀取數(shù)據(jù)的時(shí)候也是這樣子,數(shù)據(jù)是String 類型,就用readString( ) 。除boolean類型和char外,其他基本數(shù)據(jù)類型都可遵從該規(guī)律, boolean 類型的寫法參考C,Parcel 中沒有直接讀取char的方法
>**C:
>Parcel 中,也沒有直接讀取和寫出 boolean類型數(shù)據(jù)的方法.所以在 write 和 read boolean類型的數(shù)據(jù)時(shí)就需要借助Byte 。因Byte 占兩個(gè)字節(jié),要么0 要么1 ,這就和Boolean的要么true要么false 極為相似,所以,我們?cè)趙rite 的時(shí)候,判斷isAdult 是true 還是false, 如果true 就寫出字節(jié)1 ,如果false 就寫出 字節(jié) 0。在read 的時(shí)候,我們只需要判斷讀到的數(shù)據(jù)是否等于1 即可,等于1 isAdult 就是true,否則就是 false** 。
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
User user = new User();
user.setAge(27);
user.setName("張三");
user.setSex("女");
user.setIsAdult(true);
intent.putExtra("ParcelableBean", user);
startActivity(intent);
}
});
}
}
>
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
//此處獲取數(shù)據(jù)的時(shí)候, 使用 getParcelableExtra(key)
User user = (User) getIntent().getParcelableExtra("ParcelableBean");
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):",user.getName()+user.getAge()+user.getSex()+user.isAdult);
}
}
* 運(yùn)行結(jié)果

####3)使用Bundle 傳遞(對(duì)象)數(shù)據(jù)
使用bundle 傳遞數(shù)據(jù)時(shí),有如下兩種情況:
**A**
如果要傳遞的數(shù)據(jù)是一個(gè)bean對(duì)象,那么該bean類必須先實(shí)現(xiàn)Serializable 接口或者Pacelable 接口,然后通過putSerializable(key,value) 或者 putParcelable(key,value) 將對(duì)象封裝進(jìn)bundle ,然后在通過 Intent 的putExtra(key,value) 或者putExtras(bundle) 傳遞給下一個(gè)界面。示例代碼如下(這里只給出bean類實(shí)現(xiàn)Serializable 接口的代碼):
* 創(chuàng)建User 類,并實(shí)現(xiàn)Serializable 接口
public class User implements Serializable {
public String name;
public String sex;
public int age;
public boolean isAdult;
public boolean getIsAdult() {
return isAdult;
}
public void setIsAdult(boolean isAdult) {
this.isAdult = isAdult;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
User user=new User();
user.setName("張三");
user.setSex("女");
user.setAge(27);
user.setIsAdult(true);
//創(chuàng)建bundle 對(duì)象,封裝數(shù)據(jù)
Bundle bundle = new Bundle();
bundle.putSerializable("UserBean",user);
//用intent傳遞bundle 對(duì)象
intent.putExtra("bundleBean", bundle);
// intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
Bundle bundle = getIntent().getBundleExtra("bundleBean");
//Bundle bundle = getIntent().getExtras();
User user = (User) bundle.getSerializable("UserBean");
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):", user.getName() + user.getAge() + user.getSex() + user.isAdult);
}
}
**B**
如果你沒有預(yù)定義bean類,只是想通過bundle 傳遞數(shù)據(jù),那么就先創(chuàng)建 Bundle對(duì)象,然后用bundle 的putXXX(key,value) 方法,將數(shù)據(jù)封裝進(jìn)bundle ,然后再通過intent 的putExtra(key,value) 或者 putExtras(bundle) 傳遞給下一個(gè)界面。對(duì)應(yīng)代碼如下:
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
//創(chuàng)建bundle 對(duì)象,封裝數(shù)據(jù)
Bundle bundle = new Bundle();
bundle.putString("name", "張三");
bundle.putString("sex", "女");
bundle.putInt("age", 27);
bundle.putBoolean("isAdult", true);
//用intent傳遞bundle 對(duì)象
intent.putExtra("bundleBean", bundle);
// intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
Bundle bundle = getIntent().getBundleExtra("bundleBean");
//Bundle bundle = getIntent().getExtras();
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):", bundle.getString("name") + bundle.getInt("age") + bundle.getString("sex") + bundle
.getBoolean("isAdult"));
}
> 注意:
**A**
**Intent 傳遞 bundle 對(duì)象時(shí)有兩種方法,一種是putExtra(key,bundle) , 對(duì)應(yīng)的獲取方法是 getBundleExtra(key) ; 另外一種是 putExtras(bundle) ,對(duì)應(yīng)的獲取方法是 getExtras( )。**
>
**B**
實(shí)際開發(fā)中,在intent中使用bundle 作為數(shù)據(jù)載體的方式并不常用,因?yàn)檫@樣并不比使用intent 的putXXX 方便,這里主要是為了介紹這種思路以及怎么用bundle 存儲(chǔ)數(shù)據(jù);其實(shí)Bundle 更多的是用在 onSaveInstaceState( ) 方法中,確保activity頁面關(guān)閉時(shí)能夠保存數(shù)據(jù),具體的使用方法,后期會(huì)有相應(yīng)的文章介紹
###(4) 傳遞 Bean 對(duì)象的集合
最近的項(xiàng)目中就用到了這種方式,需要在組件之間傳遞一個(gè) bean 對(duì)象的集合,實(shí)現(xiàn)方式大致有四種:
#### 1)方式1
**讓bean實(shí)現(xiàn)Serializable 接口,然后將集合強(qiáng)轉(zhuǎn)成Srializable 類型,然后通過intent 的 putExtra( key , value ) 傳遞**;代碼如下:
* 創(chuàng)建User類,并讓其實(shí)現(xiàn)Serializable 接口
代碼省略,具體可以查看上面的代碼
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
// List<User> list = new ArrayList<User>();
ArrayList<User> list = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("張三" + i);
user.setSex("女");
user.setAge(27);
user.setIsAdult(true);
list.add(user);
}
intent.putExtra("SerialUserList", list); //如果集合是ArrayList 不需要強(qiáng)轉(zhuǎn)
// intent.putExtra("SerialUserList", (Serializable) list); //如果集合是List 需要強(qiáng)轉(zhuǎn)
startActivity(intent);
}
});
}
}
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
//獲取Serializable 對(duì)象,并強(qiáng)轉(zhuǎn)成 list集合
Serializable serializable = getIntent().getSerializableExtra("SerialUserList");
// List<User> userList= (List<User>) serializable;
ArrayList<User> userList = (ArrayList<User>) serializable; //接收的時(shí)候強(qiáng)轉(zhuǎn)
for (User user : userList) {
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):", user.getName() + user.getAge() + user.getSex() + user.isAdult);
}
}
}
> 這里有一點(diǎn)需要注意的,如果定義的集合類型是ArrayList 在傳遞的時(shí)候不需要強(qiáng)轉(zhuǎn),如果List 則需要強(qiáng)轉(zhuǎn)。
####2) 方式2
**讓bean 實(shí)現(xiàn)Parcelable 接口,然后使用 intent 的putParcelableArrayList(key,value) 方法**
* 創(chuàng)建User類,讓其實(shí)現(xiàn)Parcelable接口
代碼省略,具體可以參考前面的代碼。
>讓bean類實(shí)現(xiàn)Parcelable 接口時(shí),有一個(gè)小技巧,可以先把bean類及其成員變量以及set get 方法定義好,然后再去實(shí)現(xiàn)Parcelable 接口,會(huì)提示你實(shí)現(xiàn)方法,你就直接按下快捷鍵實(shí)現(xiàn)相應(yīng)的方法就好,然后你就會(huì)發(fā)現(xiàn), writeToPaecel ( ) 以及 CREATOR常量都已經(jīng)幫你生成好了,同時(shí)生成了一個(gè)bean類的有參構(gòu)造,參數(shù)是Parcel , 那么你現(xiàn)在唯一需要做的就是在給出一個(gè)空參構(gòu)造 。
* IntentUseActivity.java 數(shù)據(jù)發(fā)送方
public class IntentUseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_use);
Button btn_forResult = (Button) findViewById(R.id.btn_forResult);
btn_forResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentUseActivity.this, TestActviity.class);
List<User> list = new ArrayList<User>();
// ArrayList<User> list = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("張三" + i);
user.setSex("女");
user.setAge(27);
user.setIsAdult(true);
list.add(user);
}
// intent.putParcelableArrayListExtra("ParcelableList", list); //如果集合是ArrayList 不需要強(qiáng)轉(zhuǎn)
intent.putParcelableArrayListExtra("ParcelableList", (ArrayList<User>) list); //如果集合是List需要強(qiáng)轉(zhuǎn)成ArrayList
startActivity(intent);
}
});
}
}
* TestActviity.java 數(shù)據(jù)接收方
public class TestActviity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testactivtiy);
// ArrayList<User> userList=getIntent().getParcelableArrayListExtra("ParcelableList");
List<User> userList = getIntent().getParcelableArrayListExtra("ParcelableList"); //上面的代碼也可以
for (User user : userList) {
Log.e("上一個(gè)界面?zhèn)鬟f過來的數(shù)據(jù):", user.getName() + user.getAge() + user.getSex() + user.isAdult);
}
}
}
####3) 方式3
**讓bean類實(shí)現(xiàn)Serializable接口,然后將集合強(qiáng)轉(zhuǎn)成Srializable 類型,然后再調(diào)用Bundle 對(duì)象的 putSerializable(key ,value) ,最后在用intent 的putExtras(bundle) ,或者 putExtra(key,bundle) 將數(shù)據(jù)傳遞出去。**(這種方式歸根結(jié)底也是用了A 方式,只不過多封裝了一層,效率不高,不如直接用A實(shí)在。)
> 這種方法就不列出完整代碼了,只給出關(guān)鍵部分:
* 發(fā)送方
Bundle bundle = new Bundle();
bundle.putSerializable("userList",(Serializable)list);
intent.putExtras(bundle);
startActivity(intent);
* 接收方
List<User> userList = (List<User>) getIntent( ).getSerializableExtra
("userList");
>> **注意:**
**使用intent傳遞實(shí)現(xiàn)了Serializable 或者Parcelable接口 的bean對(duì)象或bean對(duì)象集合的時(shí)候,bean內(nèi)部包含的成員變量必須全部是基本數(shù)據(jù)類型?。。?**
>>**如果有非基本數(shù)據(jù)類型會(huì)報(bào)如下錯(cuò)誤:Parcelable encountered IOException writing serializable object android**
》》》》》》等會(huì)兒,晚上下班接著寫
####4) 方式4
**如果,你感覺用 Intent 對(duì)象傳來傳去比較麻煩,還要去解析,那么 最最直接的方法就是,自定義Application,并在自定義的Application中創(chuàng)建一個(gè)全局的集合變量,這樣各個(gè)組件就都可以訪問、獲取、設(shè)置這個(gè)集合的值了。**
###(5) 傳遞 String 、Integer、CharSequence 類型數(shù)據(jù)的集合