
目录
[第四章:Intent 与 Activity 跳转、页面传值(Java 版)](#第四章:Intent 与 Activity 跳转、页面传值(Java 版))
[4.1 什么是 Intent?](#4.1 什么是 Intent?)
[4.2 显式 Intent 与隐式 Intent](#4.2 显式 Intent 与隐式 Intent)
[4.3 两个页面之间跳转示例](#4.3 两个页面之间跳转示例)
[1️⃣ 主页面 MainActivity](#1️⃣ 主页面 MainActivity)
[2️⃣ 目标页面 SecondActivity](#2️⃣ 目标页面 SecondActivity)
[3️⃣ 注册 Activity(AndroidManifest.xml)](#3️⃣ 注册 Activity(AndroidManifest.xml))
[4.4 页面传值(传参)](#4.4 页面传值(传参))
[主页面传值给 SecondActivity](#主页面传值给 SecondActivity)
[SecondActivity 中接收参数](#SecondActivity 中接收参数)
[4.5 使用 Bundle 传递多个值](#4.5 使用 Bundle 传递多个值)
[SecondActivity 接收:](#SecondActivity 接收:)
[4.6 从 SecondActivity 返回结果](#4.6 从 SecondActivity 返回结果)
[1️⃣ MainActivity 启动方式:](#1️⃣ MainActivity 启动方式:)
[2️⃣ SecondActivity 设置返回数据:](#2️⃣ SecondActivity 设置返回数据:)
[3️⃣ MainActivity 中接收结果:](#3️⃣ MainActivity 中接收结果:)
[4.7 常见问题总结](#4.7 常见问题总结)
[1. 两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示](#1. 两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示)
[2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号)](#2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号))
[activity_main.xml 和 activity_second.xml](#activity_main.xml 和 activity_second.xml)
[3. 页面 A 跳转页面 B,用户输入内容后返回 A 并显示](#3. 页面 A 跳转页面 B,用户输入内容后返回 A 并显示)
第四章:Intent 与 Activity 跳转、页面传值(Java 版)
4.1 什么是 Intent?
Intent
是 Android 中的"意图"对象,主要用于:
启动新的 Activity
启动服务(Service)
发送广播
java
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
4.2 显式 Intent 与隐式 Intent
类型 | 用途 | 示例 |
---|---|---|
显式 Intent | 明确指定目标 Activity | new Intent(this, TargetActivity.class) |
隐式 Intent | 根据"动作"和"类别"匹配系统组件 | new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com")) |
4.3 两个页面之间跳转示例
1️⃣ 主页面 MainActivity
java
package com.example.myapp;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent); // 页面跳转
}
});
}
}
2️⃣ 目标页面 SecondActivity
java
package com.example.myapp;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
3️⃣ 注册 Activity(AndroidManifest.xml
)
java
<application ...>
<activity android:name=".SecondActivity" />
</application>
4.4 页面传值(传参)
主页面传值给 SecondActivity
java
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("username", "张三"); // 放入数据
startActivity(intent);
SecondActivity 中接收参数
java
String name = getIntent().getStringExtra("username");
TextView textView = findViewById(R.id.textView);
textView.setText("你好," + name);
4.5 使用 Bundle 传递多个值
java
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "张三");
bundle.putInt("age", 20);
intent.putExtras(bundle);
startActivity(intent);
SecondActivity 接收:
java
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
4.6 从 SecondActivity 返回结果
有时我们希望 SecondActivity 处理完后,返回数据给 MainActivity。
1️⃣ MainActivity 启动方式:
java
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1); // 1 为请求码
2️⃣ SecondActivity 设置返回数据:
java
Intent result = new Intent();
result.putExtra("result", "操作成功!");
setResult(RESULT_OK, result);
finish(); // 结束当前页面
3️⃣ MainActivity 中接收结果:
java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String msg = data.getStringExtra("result");
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
4.7 常见问题总结
问题 | 解决方案 |
---|---|
页面跳转后返回按钮不能用 | 确保 startActivity() 用于普通跳转,startActivityForResult() 用于有结果返回的跳转 |
接收参数为 null | 检查 putExtra() 和 getExtra() 的 key 是否一致 |
Activity 未注册报错 | 在 AndroidManifest.xml 中添加 <activity> 标签 |
📌 练习题
-
编写两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示
-
使用 Bundle 传递一组学生信息(姓名、年龄、学号)
-
编写一个页面 A,跳转页面 B,用户输入内容后返回 A 并显示


习题答案
1. 两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示
MainActivity.java
java
package com.example.demo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText editTextName;
private Button buttonSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextName = findViewById(R.id.editTextName);
buttonSubmit = findViewById(R.id.buttonSubmit);
buttonSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editTextName.getText().toString();
// 创建 Intent 并传递数据
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("NAME", name);
startActivity(intent);
}
});
}
}
SecondActivity.java
java
package com.example.demo;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
private TextView textViewName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textViewName = findViewById(R.id.textViewName);
// 获取传递的数据
Bundle extras = getIntent().getExtras();
if (extras != null) {
String name = extras.getString("NAME");
textViewName.setText("Hello, " + name);
}
}
}
activity_main.xml
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editTextName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name" />
<Button
android:id="@+id/buttonSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>
activity_second.xml
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp">
<TextView
android:id="@+id/textViewName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, "
android:textSize="24sp" />
</LinearLayout>
2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号)
MainActivity.java
java
package com.example.demo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Button buttonSendData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSendData = findViewById(R.id.buttonSendData);
buttonSendData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建 Bundle 并添加学生信息
Bundle bundle = new Bundle();
bundle.putString("NAME", "Alice");
bundle.putInt("AGE", 20);
bundle.putString("STUDENT_ID", "S12345");
// 创建 Intent 并传递 Bundle
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
SecondActivity.java
java
package com.example.demo;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
private TextView textViewStudentInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textViewStudentInfo = findViewById(R.id.textViewStudentInfo);
// 获取传递的 Bundle 数据
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
String name = bundle.getString("NAME");
int age = bundle.getInt("AGE");
String studentId = bundle.getString("STUDENT_ID");
String info = "Name: " + name + "\nAge: " + age + "\nStudent ID: " + studentId;
textViewStudentInfo.setText(info);
}
}
}
activity_main.xml 和 activity_second.xml
与上一部分类似,只需调整 TextView
的内容即可。
3. 页面 A 跳转页面 B,用户输入内容后返回 A 并显示
ActivityA.java
java
package com.example.demo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class ActivityA extends AppCompatActivity {
private TextView textViewResult;
private Button buttonGoToB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
textViewResult = findViewById(R.id.textViewResult);
buttonGoToB = findViewById(R.id.buttonGoToB);
buttonGoToB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, 1); // 使用 startActivityForResult
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String result = data.getStringExtra("RESULT");
textViewResult.setText("Result from B: " + result);
}
}
}
ActivityB.java
java
package com.example.demo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
public class ActivityB extends AppCompatActivity {
private EditText editTextInput;
private Button buttonSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
editTextInput = findViewById(R.id.editTextInput);
buttonSubmit = findViewById(R.id.buttonSubmit);
buttonSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String input = editTextInput.getText().toString();
// 将输入结果返回给 ActivityA
Intent resultIntent = new Intent();
resultIntent.putExtra("RESULT", input);
setResult(RESULT_OK, resultIntent);
finish(); // 关闭当前 Activity
}
});
}
}
activity_a.xml
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Result from B will appear here"
android:textSize="18sp" />
<Button
android:id="@+id/buttonGoToB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go to B" />
</LinearLayout>
activity_b.xml
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editTextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter something" />
<Button
android:id="@+id/buttonSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>