准备工作
在此教程中,您将学习如何在Android应用中切换活动组件。
前提条件
- 已安装 Android Studio 4.1.1
- 具备 Java 的基础理解
- 完成您的第一个Android应用
- 30–60 分钟的空闲时间
学习内容
- 如何创建新的活动组件
- 如何在活动之间切换
- 如何在活动之间传递数据
创建项目
- 项目名称:SwitchingActivity
- 包名:com.example.switchingactivity
- 如遇到问题,请参考您的第一个Android应用。
主界面设计
- 添加一个可编辑的文本框(EditText),文本为“张三”,居中显示,id 为
edittext_name_main。 - 添加一个按钮(Button),文本为“登入”,水平居中显示,距离文本框底部 16dp, onClick 事件为
MainAcitity.onClickLogin。 - 在
MainActivity.java中添加onClickLogin方法,用于处理按钮点击事件。 - 配置按钮点击事件,将在屏幕上显示文本框中的内容(Toast)。

activity_main.xml
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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/edittext_name_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="张三"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:onClick="onClickLogin"
android:text="登入"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edittext_name_main" />
</androidx.constraintlayout.widget.ConstraintLayout>
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
package com.example.switchingactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
}
}
运行应用

新建一个活动组件

- 在项目视图中,选中
java文件夹,右键点击,选择New->Activity->Empty Activity。

- 活动名称:
SecondActivity - 布局文件名称:
activity_second - 包名:
com.example.switchingactivity
设计第二个活动组件的布局
- 添加一个文本视图(TextView),文本为“第二个活动组件”,居中显示,id 为
textview_name_second。
最终 activity_second.xml 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:id="@+id/textview_name_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个活动组件"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Intent
现在,我们已经设计了第二个活动组件,加上已有的主活动组件,那么我们怎么才能从主活动组件切换到第二个活动组件呢?答案是使用 Intent。
什么是 Intent?
Intent 是 Android 中用于在不同组件之间进行通信的一种机制。它可以用于启动活动、服务、广播接收器等。在我们的例子中,我们将使用 Intent 来启动第二个活动组件。
Intent 类型
Intent 可以分为两种类型:显式 Intent 和隐式 Intent。
- 显式 Intent:指定要启动的组件的名称。
- 隐式 Intent:不指定要启动的组件的名称,而是根据组件的行为来确定要启动的组件。
显式 Intent
显式 Intent 是指在 Intent 中指定要启动的组件的名称。在我们的例子中,我们将使用显式 Intent 来启动第二个活动组件。
1
2
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
this表示当前活动组件的上下文。即当前活动组件的实例。SecondActivity.class表示要启动的活动组件的类名。startActivity(intent)表示启动活动组件。
集成显式 Intent 到主活动组件
- 在
MainActivity.java中,添加一个onClickLogin方法,用于处理登录按钮的点击事件。 - 在
onClickLogin方法中,创建一个Intent对象,指定要启动的组件为SecondActivity.class。 - 调用
startActivity(intent)方法启动第二个活动组件。
1
2
3
4
5
6
7
8
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
运行应用

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
package com.example.switchingactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}
页面切换并传递数据
上一步中,我们成功切换到了第二个活动组件。但是,我们在第一个活动组件中输入的用户名,在第二个活动组件中是看不到的。那么,我们该如何在页面切换时传递数据呢?
Intent 提供了一种机制,即可以在 Intent 中添加额外的数据,以便在目标组件中使用。
传递数据
- 在
onClickLogin方法中,创建一个Intent对象,指定要启动的组件为SecondActivity.class。 - 调用
putExtra方法,将用户名添加到 Intent 中。 - 调用
startActivity(intent)方法启动第二个活动组件。
1
2
3
4
5
6
7
8
9
10
// MainActivity.java
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("name", name);
startActivity(intent);
}
接收数据
- 在
SecondActivity.java中,添加一个onCreate方法,用于接收传递过来的数据。 - 调用
getIntent()方法获取启动当前活动组件的 Intent 对象。 - 调用
getStringExtra("name")方法获取传递过来的用户名。 - 在
textview_name_second中显示用户名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.switchingactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
TextView textViewName = findViewById(R.id.textview_name_second);
textViewName.setText("你好," + name);
}
}
运行应用

页面切换并返回数据
StartActivityForResult
- 定义一个常量
REQUEST_CODE,用于标识请求码。 - 调用
startActivityForResult(intent, REQUEST_CODE)方法启动第二个活动组件。
1
2
3
4
5
6
7
8
9
10
11
12
// MainActivity.java
public final int REQUEST_CODE = 100;
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("name", name);
startActivityForResult(intent, REQUEST_CODE);
}
setResult
- 在
SecondActivity.java中,添加一个onClickBack方法,用于处理返回按钮的点击事件。 - 在
onClickBack方法中,创建一个Intent对象,指定要启动的组件为MainActivity.class。 - 调用
setResult(RESULT_OK, intent)方法设置返回结果为成功,并将 Intent 传递给调用方。 - 调用
finish()方法关闭当前活动组件。
1
2
3
4
5
6
7
// SecondActivity.java
public void onClickBack(View view) {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("msg", "hello main activity from second activity");
setResult(RESULT_OK, intent);
finish();
}
处理返回结果
- 在
MainActivity.java中,添加一个onActivityResult方法,用于处理第二个活动组件返回的结果。 - 检查请求码是否与
REQUEST_CODE匹配。 - 检查结果码是否为
RESULT_OK。 - 从 Intent 中获取传递回来的消息。
- 使用
Toast显示消息。
1
2
3
4
5
6
7
8
9
10
11
// MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String name = data.getStringExtra("name");
String msg = data.getStringExtra("msg");
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
运行应用

主要文件内容
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
40
package com.example.switchingactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public final int REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String msg = data.getStringExtra("msg");
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
public void onClickLogin(View view) {
EditText editTextName = findViewById(R.id.edittext_name_main);
String name = editTextName.getText().toString();
Toast.makeText(this, "你好," + name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("name", name);
startActivityForResult(intent, REQUEST_CODE);
}
}
activity_main.xml
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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/edittext_name_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="张三"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:onClick="onClickLogin"
android:text="登入"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edittext_name_main" />
</androidx.constraintlayout.widget.ConstraintLayout>
SecondActivity.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
package com.example.switchingactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
TextView textViewName = findViewById(R.id.textview_name_second);
textViewName.setText("你好," + name);
}
public void onClickBack(View v) {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("msg", "hello main activity from second activity");
setResult(RESULT_OK, intent);
finish();
}
}
activity_second.xml
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
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:id="@+id/textview_name_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个活动组件"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:onClick="onClickBack"
android:text="返回"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textview_name_second" />
</androidx.constraintlayout.widget.ConstraintLayout>
总结
- 通过Intent和StartAcitivity切换活动组件。
- 通过Intent传递数据和接收返回结果。
- 通过StartActivityForResult切换活动组件并通过onActivityResult接收返回结果。
- 通过setResult设置返回结果。
次
人
评论
有疑问或建议?请在下方评论区留言!