Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。
Intent中传递这2种对象的方法:
1
2
3
|
Bundle.putSerializable(Key,Object);
//实现Serializable接口的对象
Bundle.putParcelable(Key, Object);
//实现Parcelable接口的对象
|
一、传递对象
假设由登录界面(Login)跳转到主界面(MainActivity)传递的对象为登录的用户信息 User类
1.首先创建一个序列化类:User
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package
org.yayun.demo;
import
java.io.Serializable;
import
android.R.integer;
public
class
User
implements
Serializable {
private
String name;
private
int
level;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
int
getLevel() {
return
level;
}
public
void
setLevel(
int
level) {
this
.level = level;
}
public
User(String name,
int
level) {
this
.name=name;
this
.level=level;
}
}
|
注意点,类实现Serializable接口
2.布局文件很简单,main.xml中一个Button,login.xml中一个TextView:
1
2
|
<!--?xml version=
1.0
encoding=utf-
8
?-->
<linearlayout android:layout_height=
"fill_parent"
android:layout_width=
"fill_parent"
android:orientation=
"vertical"
xmlns:android=
"http://schemas.android.com/apk/res/android"
><button android:id=
"@+id/btn"
android:layout_height=
"wrap_content"
android:layout_width=
"fill_parent"
android:text=
"登录"
></button></linearlayout>
|
1
2
3
4
5
6
|
<!--?xml version=
1.0
encoding=utf-
8
?-->
<linearlayout android:layout_height=
"fill_parent"
android:layout_width=
"fill_parent"
android:orientation=
"vertical"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<textview android:id=
"@+id/text"
android:layout_height=
"wrap_content"
android:layout_width=
"fill_parent"
android:text=
"/"
>
</textview></linearlayout>
|
3.MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package
org.yayun.demo;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
private
Button button;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
// 生命周期方法
super
.setContentView(R.layout.main);
// 设置要使用的布局管理器
button=(Button)findViewById(R.id.btn);
button.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
User user=
new
User(yayun,
7
);
//实例化对象
Intent intent=
new
Intent();
intent.setClass(MainActivity.
this
, LoginActivity.
class
);
Bundle bundle=
new
Bundle();
bundle.putSerializable(user, user);
//序列化
intent.putExtras(bundle);
//发送数据
startActivity(intent);
//启动intent
}
});
}
}
|
4.接收Activity--LoginActivity.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
org.yayun.demo;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.widget.TextView;
public
class
LoginActivity
extends
Activity {
private
TextView textView;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
// 生命周期方法
super
.setContentView(R.layout.login);
// 设置要使用的布局管理器
textView = (TextView) findViewById(R.id.text);
Intent intent =
this
.getIntent();
User user = (User) intent.getSerializableExtra(user);
textView.setText(用户名: + user.getName() + 用户等级
+ String.valueOf(user.getLevel()));
}
}
|
5.运行实例如下:
可以看出,对象已经成功传过来了!
二、传递对象集合
1.布局文件没有改变,我们看一下MainActivity.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package
org.yayun.demo;
import
java.io.Serializable;
import
java.util.ArrayList;
import
java.util.List;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
private
Button button;
List<user> list=
new
ArrayList<user>();
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
// 生命周期方法
super
.setContentView(R.layout.main);
// 设置要使用的布局管理器
button=(Button)findViewById(R.id.btn);
button.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
User user1=
new
User(yayun,
7
);
//实例化对象
User user2=
new
User(feifei,
9
);
list.add(user1);
list.add(user2);
Intent intent=
new
Intent();
intent.setClass(MainActivity.
this
, LoginActivity.
class
);
Bundle bundle=
new
Bundle();
bundle.putSerializable(list,(Serializable)list);
//序列化,要注意转化(Serializable)
intent.putExtras(bundle);
//发送数据
startActivity(intent);
//启动intent
}
});
}
}</user></user>
|
2.看一下接收Activity--LoginActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
org.yayun.demo;
import
java.util.List;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.widget.TextView;
public
class
LoginActivity
extends
Activity {
private
TextView textView;
List<user> list;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
// 生命周期方法
super
.setContentView(R.layout.login);
// 设置要使用的布局管理器
textView = (TextView) findViewById(R.id.text);
Intent intent =
this
.getIntent();
list = (List<user>) intent.getSerializableExtra(list);
//获取list方式
User user1=list.get(
0
);
User user2=list.get(
1
);
textView.setText(用户名: + user2.getName() + 用户等级
+ String.valueOf(user2.getLevel()));
}
}</user></user>
|
3.运行实例:
我们看出,已经从对象集合中取出对象了!
总结
1.Bundle.putSerializable(Key,Object); //实现Serializable接口的对象;
2.获取对象User user = (User) intent.getSerializableExtra(user);
3.bundle.putSerializable(list,(Serializable)list);//对象集合存入方式;
4.list = (List) intent.getSerializableExtra(list);//获取对象集合list方式