【笔记】Android跳转Activity

前言

Android跳转Activity学习笔记

跳转Activity是不携带参数

this:从当前Activity跳转
MainActivity2.class:跳转到Activity2

1
2
3
Intent intent = new Intent(this, MainActivity2.class);
// 开始跳转
startActivity(intent);

携带基本数据类型参数

跳转时携带参数

<key>:跳转时携带的参数名
<value>:跳转时携带的参数名

1
2
3
4
5
Intent intent = new Intent(this, MainActivity2.class);
// 设置携带的参数
intent.putExtra("<key>", "<value>");
// 开始跳转
startActivity(intent);

接收跳转时携带的参数

  • 即便是传递的Bundle对象,也可以直接获取其中携带的参数

0:默认值

1
2
3
4
Intent intent = getIntent();

intent.getStringExtra("<key>");
intent.getCharExtra("<key>", '0');

携带Bundle对象参数

跳转时携带参数

1
2
3
4
5
6
7
8
Intent intent = new Intent(this, MainActivity2.class);
// 封装Bundle
Bundle bundle = new Bundle();
bundle.putString("<key>", "<value>");
// 设置携带的参数
intent.putExtras(bundle);
// 开始跳转
startActivity(intent);

接收跳转时携带的参数

  • 即便是传递的Bundle对象,也可以直接获取其中携带的参数

0:默认值

1
2
3
4
Intent intent = getIntent();

intent.getStringExtra("<key>");
intent.getCharExtra("<key>", '0');

携带Serializable接口对象参数

  • Serializable接口对象携带参数是针对于JVM的,性能低,不推荐在Android中使用,推荐在Java开发时使用

创建一个实体类

  • 必须实现Serializable接口才有资格以对象的身份传递参数
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
public class User implements Serializable {

private String username;
private String password;

public User() {
}

public User(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

跳转时携带参数

1
2
3
4
5
6
7
Intent intent = new Intent(this, MainActivity2.class);
// 创建需要传递的对象
User user = new User("username", "password");
// 设置携带的参数
intent.putExtra("<key>", user);
// 开始跳转
startActivity(intent);

接收跳转时携带的参数

  • 强制类型转换为对象的类型
1
User user = (User) intent.getSerializableExtra("<key>");

携带Parcelable接口对象参数

  • Parcelable接口对象传递参数是针对于Android虚拟机的,所以推荐使用这种方式传递参数

创建一个实体类

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class User implements Parcelable {

private String username;
private String password;

// 从Parcel接口对象中读取属性
// 读取的顺序和写入的顺序必须一致
protected User(Parcel in) {
username = in.readString();
password = in.readString();
}

// 把属性写入到Parcel接口对象中
// 读取的顺序和写入的顺序必须一致
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(username);
dest.writeString(password);
}

// 系统扩展用的,不需要修改
@Override
public int describeContents() {
return 0;
}

// CREATOR一定要有,不需要修改(自动生成/文档获取)
public static final Creator<User> CREATOR = new Creator<User>() {
// 创建User对象,并通过Parcel构建好,传递给Student
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}

@Override
public User[] newArray(int size) {
return new User[size];
}
};

public User() {
}

public User(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

跳转时携带参数

1
2
3
4
5
6
7
Intent intent = new Intent(this, MainActivity2.class);
// 创建需要传递的对象
User user = new User("username", "password");
// 设置携带的参数
intent.putExtra("<key>", user);
// 开始跳转
startActivity(intent);

接收跳转时携带的参数

1
User user = intent.getParcelableExtra("<key>");

完成

参考文献

哔哩哔哩——Android架构解析